3

ネストされた form によって生成された各行に一意の ID を割り当てたい。

この質問Creation unique id for <fieldset> when using form_for Rails Nested Model Formを見ましたが、これで問題は解決しません。

4

2 に答える 2

2

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 がうまく機能することに注意することも重要です。

于 2014-11-11T11:53:59.597 に答える