2

我有以下关系:

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”,但它如何工作?提前致谢

4

1 回答 1

6

我在使用 Rails 编写的名为Spree的电子商务 gem 上工作。以下是我们解决该问题的方法。

我们有 4 个模型:VariantProduct和。这些构成了我们订购系统的基础。变体可以被视为产品的“突变”。假设您有一件可以有红色、绿色或蓝色的 T 恤。产品是 T 恤,而颜色是变体。OrderLineItem

变体通过 LineItems 链接到订单。LineItem 对象存储: a variant_id, aquantity和变体的当前价格,以防以后发生变化。您不希望用户的价格发生意外变化!

将商品添加到购物车的逻辑只是一个带有 variant_id 和产品页面上的数量字段的表单。这是 Spree 的版本。控制器处理该表单的操作基本上采用 variant_id 和数量,并执行以下操作:

  1. 检查订单是否已经存在
  2. 如果订单不存在,则创建一个
  3. 在指定数量和 variant_id 的订单上创建一个新行项目,并存储价格。

由于我们关心库存水平等,Spree 对此的巫术要复杂一些,但这是它的基本要点。

当用户查看他们的购物车时,我们会向他们展示一个包含所有行项目和数量数字字段的表单。该表格如下所示:

查看

生成该表单的代码位于三个文件中orders/edit.html.erborders/_form.html.erborders/_line_item.html.erb

该表单通过提交到 来工作OrdersController#update,并且由于表单中的字段是嵌套属性,因此整个订单及其订单项都会得到适当的更新。

我希望这可以帮助你!

于 2013-07-10T22:45:00.713 回答