我希望允许客户在同一页面上添加同一产品的多个变体。现在我有一个带有单选按钮的变种列表,如何使它们复选框? 当然,将“radio_button_tag”改为“check_box_tag”没有帮助
<% @product.variants_and_option_values(current_currency).each_with_index do |variant, index| %>
<%= radio_button_tag "products[#{@product.id}]", variant.id, index == 0, 'data-price' => variant.price_in(current_currency).display_price %>
<%= variant_options variant %>
<% end%>
答案 0 :(得分:1)
让我们创建一个示例,其中产品ID为1,并且您尝试添加ID为11和12的变体。
当您将radio_button_tag更改为check_box_tag时,将发布以下参数:
products[1]:11
products[1]:12
quantity:1
当Rack解释它时,它会看到你有两个同名的变量,这意味着它将选择指定的最后一个变量。你的params哈希看起来像这样:
{
"products"=>{"1"=>"12"},
"quantity"=>"1"
}
您可以对此进行的最简单修改是将复选框标记更改为:
<%= check_box_tag "products[#{@product.id}][]", variant.id, index == 0, 'data-price' => variant.price_in(current_currency).display_price %>
这将使您的哈希看起来像:
您可以对此进行的最简单修改是将复选框标记更改为:
{
"products"=>{"1"=>["11", "12"]},
"quantity"=>"1"
}
然后,您需要在Spree::OrderPopulator中修改此代码以处理传入的数组(而不是整数)。类似的东西:
from_hash[:products].each do |product_id,variant_ids|
variant_ids.each do |variant_id|
attempt_cart_add(variant_id, from_hash[:quantity])
end
end if from_hash[:products]
你应该好好去。