【问题标题】:Add multiple items to a cart at the same time同时将多个商品添加到购物车
【发布时间】:2013-07-10 22:14:11
【问题描述】:

我有以下关系:

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

【问题讨论】:

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


    【解决方案1】:

    我正在开发一个使用 Rails 编写的名为 Spree 的电子商务 gem。以下是我们解决该问题的方法。

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

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

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

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

    Spree 在这方面的巫术有点复杂,因为我们关心库存水平等等,但这是它的基本要点。

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

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

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

    希望对你有帮助!

    【讨论】:

    • 干得好!我找到了一个受您的回答启发的解决方案
    猜你喜欢
    • 2020-01-14
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多