在Rails中,如何为特定的会话临时存储活动记录



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

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

创建购物车:

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

最新更新