我将 Devise 和 Piggybak 用于Rails 项目,Piggybak 使用名为cart的 cookie来存储用户购物车。问题是 Piggybak 不会破坏用户 sign_out 上的 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 但不会将其保存在用户模型上。为什么会这样?