这并不像看起来那么容易,因为您将使用Spree::OptionValue
记录而不是变体,在某些时候您会希望转换回变体以便将其添加到购物车。组合可能无法实现和/或缺货,因此使用 option_values 非常不切实际。
但尽管如此,您想知道如何设置,所以我设置了以下内容:
@options = Spree::OptionValue.joins(:option_value_variants).where(spree_option_value_variants: { variant_id: @product.variant_ids }).group_by(&:option_type)
这将为您提供一个散列,散列的键是 option_types(在您的情况下是大小、颜色、长度),值是 option_values 数组。
您可以轻松地将其形成这样的收音机:
<% @options.each do |option_type, option_values| %>
<%= content_tag :h2, option_type.presentation %>
<% option_values.each do |option_value| %>
<%= radio_button_tag option_type.name, option_value.id %>
<%= label_tag option_value.presentation %>
<% end %>
<% end %>
或者对于下拉菜单:
<% @options.each do |option_type, option_values| %>
<%= content_tag :h2, option_type.presentation %>
<%= collection_select :variants, option_type.name, option_values, :id, :presentation %>
<% end %>
在你的控制器中,你会想要找到一个符合这 3 个标准的变体,检查它是否是in_stock
, backorderable
or track_inventory?
is false
并回复错误或更新购物车:)
我希望这有帮助