1

我是 ruby​​ on rails 的新手,我正在制作购物车,无需登录即可将产品添加到购物车,也无需登录即可购买购物车中的产品,因此我不必将购物车保存在数据库中,我需要将购物车保存在会话中,一个购物车有很多line_item,每个line_item都有一个产品,,另一种情况是用户登录时,在这个案例我必须将购物车存储在数据库中,这部分正在工作,但我需要将带有许多 line_items 的购物车添加到会话中,因为用户已注销,我搜索但找不到任何有用的东西,我感谢任何帮助,任何想法,任何链接来解决我的问题。谢谢

对不起,我的英语不是我的母语

4

2 回答 2

2

Rails 使您能够将信息存储在会话哈希中。我建议在会话哈希中添加一个键来存储一系列行项目。我会在您的控制器或应用程序控制器中放置类似的内容,例如以下示例:

class ApplicationController < ActionController::Base
  before_filter :build_temporary_cart

  def build_temporary_cart
    # This assumes that you check for logged in user using current_user
    session[:temporary_shopping_cart] = [] unless current_user
  end
end

当您的访客用户单击添加到购物车时,您将在您的订单项控制器或您用于将商品添加到购物车的任何控制器中执行以下操作:

session[:temporary_shopping_cart] << @line_item

查看http://guides.rubyonrails.org/action_controller_overview.html#accessing-the-session以获取有关访问会话哈希的更多信息。

于 2013-08-30T23:09:06.177 回答
0

我认为更好的方法是只存储在会话中 cart_id 。然后您的所有项目都存储在数据库中(与登录用户相同)您可以这样做:

def current_cart
  Cart.find(session[:cart_id]
  Rescue ActiveRecord::RecordNotFound
  cart = Cart.create
  session[:cart_id] = cart.id
end 

您必须创建具有多个 line_items 的购物车模型并添加依赖项以销毁

has_many :line_items , :dependent => :destroy 

在您的用户完成购买后,您可以销毁包含所有 line_items 的购物车项目。

于 2014-01-10T22:17:07.213 回答