ネストされた form によって生成された各行に一意の ID を割り当てたい。
この質問Creation unique id for <fieldset> when using form_for Rails Nested Model Formを見ましたが、これで問題は解決しません。
ネストされた form によって生成された各行に一意の ID を割り当てたい。
この質問Creation unique id for <fieldset> when using form_for Rails Nested Model Formを見ましたが、これで問題は解決しません。
link_to_add
実際、Anil Maurya によって提供されたソリューションは、gem によって提供されるJavaScript を使用して動的に追加されたアイテムに対してのみ機能します。しかし、私にとっては、new_association
既存のアイテムに任せます。
ネストされたすべての要素 (深くネストされたものも含む) を適切に識別するために、 を使用できますf.index
。利点は、エントリが既に存在する場合 (つまり、データベースに存在する場合)、配列内にあるインデックスに置き換えられることです。ただし、使用すると、Anil Maurya のソリューションと同様に、nested_form によって自動的に生成された IDlink_to_add
に置き換えられます。f.index
深くネストされたソリューションの場合、要素に適切にタグを付ける必要がある場合は、毎回fields_for
同じ変数を記述して使用するのではなくf
、レンダリングするパーシャルを指定し、毎回別のf
変数を使用してパーシャルに渡す必要があります。
例:あなたが持っている場合
Main has_many :nested1s
Nested1 has_many :nested2s
Nested2 has_many :nested3s
次に、コードは次のようになります (より難しいため、テーブルの例を示しました)。
<%= nested_form_for @Main do |main_form| %>
<table>
<thead>
<stuff />
</thead>
<%= main_form.fields_for :nested1s, :wrapper => false do |nested1_f| %>
<%= render 'main/nested1_fields', nested1_f: nested1_f %>
<% end %>
_nested1_fields.html.erb
<tbody class="fields">
<tr>Stuff</tr>
<tr>
<table id="nested1-<%= nested1_f.index %>-nested2s">
<thead>Stuff</thead>
<%= nested1_f.fields_for :nested2s, :wrapper => false do |nested2_f| %>
<%= render 'main/nested2_fields', nested1_f: nested1_f, nested2_f: nested2_f %>
<% end %>
</table>
</tr>
<tr><%= nested1_f.link_to_add 'add nested2', :nested2, :data => { :target => "#nested1-#{nested1_f.index}-nested2s"}, class: "btn btn-sm btn-success" %>
</tbody>
_nested2_fields.html.erb
<tbody class="fields">
...
<table id="nested1-<%= nested1_f.index %>-nested2-<%= nested2_f.index %>-nested3s">
<%= fields_for :nested3s do |nested3_f| %>
...
...
</tbody>
また、ネストされたすべてのフィールドセットがクラス「fields」のタグでラップされている場合にのみ、gem nested_form がうまく機能することに注意することも重要です。