我尝试在“产品展示”页面上创建一个部分,该部分将显示3个产品,其下方有复选框,以及一个用于将所选产品添加到购物车的按钮。正如我现在所做的那样,只有最后一项被添加到购物车中,我相信因为正在使用具有相同名称的多个变量,并且只选择了最后一个(如所讨论的here)。
以上链接的答案是针对Spree 2.0.4,我使用的是3.1.0,所以我无法使用上面讨论的答案。
我已经研究了Spree API,正如this问题中所讨论的那样(并且还使用了Rails 4和Spree 3,这更接近我需要的版本)。但是没有答案,只是评论说"使用api"并没有讨论如何这样做。
另一位answer建议使用Spree Promotions,但我不认为这是我需要的。
(这个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 %>
答案 0 :(得分:1)
所以我最终选择的解决方案是添加一个带有产品ID的隐藏字段。然后我将一个JS事件处理程序绑定到表单,以便在提交时,我阻止默认操作并创建一个选中了复选框的产品ID数组。然后我遍历该数组并向网址/api/v1/orders/${orderNumber}/line_items?line_item[variant_id]=${itemID}&line_item[quantity]=1
的Spree API发送POST请求,并将其重定向到购物车页面。