同时将多个项目添加到购物车

时间:2013-07-10 22:14:11

标签: ruby-on-rails ruby forms product cart

我有以下关系:

Class CartItem
belongs_to :cart
belongs_to :product

Class Product (<=> category)
has_many :cart_items


Class Cart
has_many :cart_items

当有人将产品添加到购物车时,它会在CartItem表中使用cart.id和product.id创建一行。 我可以在编辑页面上添加和删除产品到购物车,它可以工作。

但现在我想同时在购物车中添加或删除多个产品。当客户可以输入我们想要添加/删除的号码时,我只需要一个输入数字字段。但是,我没有设法这样做,因为在编辑表单中,如果我放置一个名为“number”的字段(对于每个产品),显然会出现错误,因为没有属性“number”。我应该添加一个“field_tag”,但它怎么能起作用?提前致谢

1 个答案:

答案 0 :(得分:5)

我使用名为Spree的Rails编写的电子商务宝石。以下是我们如何解决这个问题。

我们有4个模型:VariantProductOrderLineItem。这些构成了我们订购系统的基础。变体可以被认为是产品的“突变”。假设你有一个可以有红色,绿色或蓝色的TShirt。产品是TShirt,而颜色是变体。

变量通过LineItems链接到Orders。 LineItem对象存储:variant_idquantity和变体的当前价格,以防以后更改。您不希望用户意外地改变价格!

将商品添加到购物车的逻辑只是在产品页面上带有variant_id和数量字段的表单。 Here's Spree's version。控制器处理该表单的操作基本上采用variant_id和quantity,并执行此操作:

  1. 检查订单是否已存在
  2. 如果订单不存在,请创建一个
  3. 在订单上创建一个新订单项,并指定数量和variant_id,并存储价格。
  4. 施普雷的伏都教在这方面有点复杂,因为我们关心库存水平等等,但这是它的基本要点。

    当用户查看他们的购物车时,我们会向他们展示包含所有订单项和数量数字字段的表单。那个表格看起来像这样:

    checkout http://f.cl.ly/items/3P3t3o1F283a1e0Z3e0C/Screen%20Shot%202013-07-11%20at%208.39.20%20AM.png

    生成该表单的代码分为三个文件:orders/edit.html.erborders/_form.html.erborders/_line_item.html.erb

    该表单的工作方式是提交到OrdersController#update,由于表单中的字段是嵌套属性,整个订单及其订单项都会相应更新。

    我希望这可以帮到你!