Spree,Ruby on Rails - 添加到购物车同一产品的多个变种

时间:2013-08-17 11:11:21

标签: ruby-on-rails spree

我希望允许客户在同一页面上添加同一产品的多个变体。现在我有一个带有单选按钮的变种列表,如何使它们复选框? 当然,将“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%>

1 个答案:

答案 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]

你应该好好去。