1

Rails プロジェクトにDeviseと Piggybak を使用しています。Piggybak は、cart という名前の Cookie を使用してユーザーのカートを保存します。問題は、Piggybak がユーザーのサインアウト時に Cookie を破棄しないため、別のユーザーでサインインすると、同じ Cookie が使用されるため、同じカートが使用されることです。

その Cookie の値をユーザー モデルに保存して、別のサインインでカートを取り戻せるようにすることを解決したいと考えています。私がしたことは、Devise.sessions#destroy メソッドをオーバーライドして、ユーザーの Cookie 値を保存し、Cookie を破棄することでした。

# app/controllers/users/sessions_controller.rb

class Users::SessionsController < Devise::SessionsController

  def destroy
    current_user.add_cart_cookie(cookies['cart']['value'])
    cookies['cart'] = { value: '', path: '/' }
    super
  end
end

ルートで正しくルーティングします。

# config/routes.rb

...

devise_for :users, controllers: { sessions: 'users/sessions' }

...

そして、add_cart_cookie私のユーザーモデルへのメソッドを作成します:

# app/models/user.rb

class User < ActiveRecord::Base

...

  def add_cart_cookie(value)
    self.cart_cookie = value
  end

...

end

しかし、これは機能していません。Cookie を破棄しますが、ユーザー モデルには保存しません。なぜこうなった?

4

1 に答える 1