在Spree商店中添加多个产品(Rails 4.2.5.2/Spree 3.1.0)
问题描述:
我试图在产品展示页面上创建一个部分,该部分将显示3种产品,其下方有复选框,以及一个按钮将选定的人添加到购物车。就像我现在所做的那样,只有最后一个项目被添加到购物车中,我相信是因为使用了多个具有相同名称的变量,并且只有最后一个被选中(如here所述)。在Spree商店中添加多个产品(Rails 4.2.5.2/Spree 3.1.0)
上面链接的答案适用于Spree 2.0.4,我使用的是3.1.0,所以我不能很好地使用那里讨论的答案。
我已经看过Spree API,正如在this问题中讨论的那样(以及使用Rails 4和Spree 3,与我需要的版本非常接近)。但没有答案,只是一个评论说“使用API”,并没有讨论如何这样做。
另一个answer建议使用Spree促销,但我不认为这就是我需要的。
(这other答案使用Rails 3.2,并order_populate
他们引用我找不到的型号。)
这里是我的代码:
<%= form_for :order, url: populate_orders_path do |f| %>
<!-- placeholder; select actual products later -->
<% Spree::Product.all.take(3).each_with_index do |product, index| %>
<% if product.can_supply? %>
<%= render partial: 'spree/products/product', locals: { product: product } %>
<%= hidden_field_tag "variant_id", product.master.can_supply? ? product.master.id : product.variants.find(&:can_supply?).id %>
<!-- placeholder; replace with checkbox after hardcoded quantity working -->
<%= hidden_field_tag :quantity, 1 %>
<%#= check_box "quantity", product.master.id, { class: "similar-product-checkbox" } %>
<% end %>
<% end %>
<span class="input-group-btn">
<%= button_tag class: 'btn btn-success primary-cta', id: 'add-pairings-to-cart-button', type: :submit do %>
<%= Spree.t(:add_items_to_cart) %>
<% end %>
</span>
<% end %>
答
所以我结束了去解决正在添加一个带有产品ID的隐藏字段。然后,我将一个JS事件处理程序绑定到表单,所以当它被提交时,我会阻止默认操作并创建一个选中复选框的产品ID数组。然后,我遍历该数组并向POST Spree API发送POST请求,地址为/api/v1/orders/${orderNumber}/line_items?line_item[variant_id]=${itemID}&line_item[quantity]=1
,并将它们重定向到购物车页面。