1
我使用Devise和Piggybak作为Rails project,Piggybak使用名为的购物车来存储用户购物车。问题是Piggybak不会销毁用户sign_out上的cookie,因此,如果我与另一个用户签约,它会使用相同的cookie,因此也是同一个购物车。如何将信息保存到Devise.sessions上的模型#destroy?
我想解决的是将该cookie值存储到我的用户模型中,使其能够在另一个sign_in上取回他的购物车。我所做的就是重写#销毁方法Devise.sessions,以节省用户的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,但不保存在用户模型。这是为什么发生?
你必须保存用户实例(在'add_cart_cookie'方法 – 2013-04-25 15:35:16
我是否使用'self.save!'?如何在保存之前传递密码和password_confirmation进行身份验证? – 2013-04-25 16:53:26