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

我希望允许客户在同一页面上添加同一产品的多个变体。 现在我有一个带有单选按钮的变种列表,如何使它们成为复选框 ? 当然,将“radio_button_tag”更改为“check_box_tag”无济于事

  variant.price_in(current_currency).display_price %>   

让我们创建一个示例,其中产品ID为1,并且您尝试添加id为11和12的变体。

将radio_button_tag更改为check_box_tag时,将发布以下参数:

 products[1]:11 products[1]:12 quantity:1 

当这被Rack解释时,它会看到你有2个具有相同名称的变量,这意味着它将选择指定的最后一个变量。 你的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] 

你应该好好去。