2017-08-10 39 views
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 %> 

回答

1

所以我结束了去解决正在添加一个带有产品ID的隐藏字段。然后,我将一个JS事件处理程序绑定到表单,所以当它被提交时,我会阻止默认操作并创建一个选中复选框的产品ID数组。然后,我遍历该数组并向POST Spree API发送POST请求,地址为/api/v1/orders/${orderNumber}/line_items?line_item[variant_id]=${itemID}&line_item[quantity]=1,并将它们重定向到购物车页面。

相关问题