如何在块内使用Rails集合选择

时间:2019-06-18 17:15:37

标签: ruby-on-rails ruby forms simple-form collection-select

我在Rails 6电子商务库存跟踪中使用Simple Form,并且我需要在表单中基于关联显示多个集合选择。

这是数据模型:

Product
   has_many Option(s)
Option
   has_many Choice(s)
   belongs_to Product
Choice
   has_many Variant(s)
   belongs_to Option
Variant
   belongs_to Choice(s)

因此产品可能看起来像这样:

Product => T-Shirt
Options => Size { choices: small, medium, large }, Color { choices: red, green, blue }
Variant #1 => T-Shirt in Medium Red, etc.

当不是每个产品都具有客户需要选择的相同数量的选项(例如尺寸或颜色)时,如何构建产品选项的集合选择?某些产品可能有0个选项,另一些产品可能有1个(例如仅颜色),2个(例如大小和颜色),3个等等。

因此,在“变体”表单上,我想收集属于关联产品的集合。我可以这样在Variant#show视图上显示它们:

<ul>
  <% @product.options.each do |option| %>
    <li>
      <%= option.name %>
      <ul>
        <% option.choices.each do |choice| %>
          <li><%= choice.name %></li>
        <% end %>
      </ul>
    </li>
  <% end %>
</ul>

这在Variants#show视图中按预期工作。

但是您如何做同样的事情,并使用collection_select在Variant表单中收集0个或多个Options及其相关选项?我使用的是简单表单,所以我正在尝试类似的方法,但是它不起作用并且被阻止了:

<% @variant.product.options.each do |option| %>
    <div class='form-row'>
      <div class='col'>
        <%= f.label option.name %>
        <% option.choices.each do |choice| %>
          <%= f.association choice %>
        <% end %>
      </div><!-- /.col -->
    </div><!-- /.form-row -->
  <% end %>

该表格的版本给我以下错误:

RuntimeError in Variants#edit

enter image description here

0 个答案:

没有答案