首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将信息保存到Devise.sessions#destroy上的模型中?

如何将信息保存到Devise.sessions#destroy上的模型中?
EN

Stack Overflow用户
提问于 2013-04-25 13:09:04
回答 1查看 178关注 0票数 1

我在Rails项目中使用了Devise,Piggybak使用一个名为cart的cookie来存储用户购物车。问题是Piggybak不会破坏用户sign_out上的cookie,因此,如果我和其他用户一起使用sign_in,它使用相同的cookie,因此使用相同的购物车。

我想解决将这个cookie值存储到我的用户模型中的问题,使它能够在另一个sign_in上返回他的购物车。我所做的是重写Devise.sessions#destroy方法以保存用户的cookie值并销毁cookie:

代码语言:javascript
复制
# 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

在路由中正确地路由:

代码语言:javascript
复制
# config/routes.rb

...

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

...

并为我的用户模型创建方法add_cart_cookie

代码语言:javascript
复制
# app/models/user.rb

class User < ActiveRecord::Base

...

  def add_cart_cookie(value)
    self.cart_cookie = value
  end

...

end

但这不起作用,它破坏了cookie,但不要将其保存在用户模型上。为什么会发生这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-25 18:11:28

做到了,谢谢你,玛丽安。

我所做的是更改我的add_cookie_cart方法以接受另一个参数:

代码语言:javascript
复制
# app/models/user.rb

class User < ActiveRecord::Base

...

  def add_cart_cookie(value, password)
    self.cart_cookie = value
    self.password = password
    self.password_confirmation = password
    self.save
  end

...

end

并相应地更改了我的session#destroy:

代码语言:javascript
复制
class Users::SessionsController < Devise::SessionsController

  def destroy
    current_user.add_cart_cookie(cookies['cart']['value'], current_user.password)
    cookies['cart'] = { value: '', path: '/' }
    super
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16215646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档