在Rails中如何仅为该特定会话临时存储活动记录?

时间:2015-06-06 08:44:16

标签: ruby-on-rails ruby

我有一个购物车模型。当有人单击Add to cart时,我只想在用户登录时在数据库中创建记录。如果没有登录用户,我想将其存储在临时存储中,当用户关闭时将被删除浏览器。原因是,即使是未登录的用户也可以作为访客结帐。我怎样才能做到这一点?有没有办法使用像redis

这样的方法来做到这一点

1 个答案:

答案 0 :(得分:1)

我认为你也可以将ActiveRecord用于这样的用户,并且每次比较使用user_id擦除等于nil的购物车,比如2小时。这种方法的好处是你不应该处理购物车的登录而不是以不同的方式登录用户(我的意思是,从不同的来源获取它们,以不同的方式存储它们,确保它们是一致的)。

只需创建购物车:

cart = Cart.find(session[:cart_id]) if session[:cart_id]
if cart.blank?
  cart = Cart.create(user: current_user)
  session[:cart_id] = cart.id
end

然后用cron(通过whenever gem)扫描它们:

every 2.hours do
  rake "carts:sweep_inactive"
end