前提・実現したいこと
gem cocoon を利用して、親子関係のテーブルに複数のデータを同時更新するformを作成する際に、
マスタデータとして登録してあるデータを取得し、その件数分入力欄を出力させたいと思っております。
発生している問題
viewファイル内で
<thead> <tr> <th>th要素</th> <th>th要素</th> <th>th要素</th> <th>th要素</th> <th>th要素</th> <tr> </thead> <tbody> <% @master_items.each do |master_item| %> <%= form.fields_for :childs do |child| %> <%= render 'child_fields', { f: child, master_item: master_item } %> <% end %> <% end %> </tbody>
のようにマスタデータが格納された配列@master_items
をeachしてその分_child_fileds.html.erb
をrenderしていますが、この場合、@master_items
の要素数の2倍のrenderをしてしまいます。
@master_items
をeachしている中で、fileds_forで子モデルのデータ数分renderを繰り返すのが原因だと思っていますが、どうにも解決する方法が思いつかないため、質問させていただきました。
@master_items
の中身が2件であれば、2回renderさせ、以下のように表示されるのが実現したい内容となります。
※実際に入力する部分は一番右のth要素の下の入力欄のみとなります。
現在は、@master_items
が2件であるにも関わらず、4回renderをしてしまっている状況です。
上記以外のソースコード
Parent.rb
parent.rb
1class Parent < ApplicationRecord 2 has_many :childs 3 accepts_nested_attributes_for :childs 4end
Child.rb
child.rb
1class Child < ApplicationRecord 2 belongs_to :parent 3end
_child_fileds.html.erb
<tr class="nested-fields"> <td><%= master_item.item1 %></td> <td><%= master_item.item2 %></td> <td><%= master_item.item3 %></td> <td><%= master_item.item4 %></td> <td><%= f.number_field :child_input_item, class: 'form-control' %></td> </tr>
補足情報(FW/ツールのバージョンなど)
- Ruby: 2.5.7
- Ruby on Rails: 5.2.4
- gem cocoon: 1.2.14
足りない情報がありましたら、ご指摘ください。
説明が難しく、不足している部分が多いと思いますが、ご協力お願いいたします。
あなたの回答
tips
プレビュー