我正在尝试创建一个包含fields_for block和non fields_for block的表单:
但是输出正在重复,看起来它们正在循环......
也许是因为,有一个fields_for块,另一个不是fields_for / form。
如何在<tbody>
或<tr>
标记内合并其中两个。
<% @annual_procurement_plan.project_procurement_management_plans.each do |ppmp| %>
<% ppmp.items.each do |itemx| %>
<tbody>
<%= f.fields_for :project_procurement_management_plans do |p| %>
<%= p.fields_for :items do |item| %>
<tr class="nested-fields info">
<td>
<%= item.select :category_id, Category.all.map{|c| [c.code, c.id]}%>
</td>
<td>
<%= content_tag :span, itemx.description%>
</td>
<td><%= p.text_field :pmo_end_user%>
</td>
</tr>
<% end %>
<% end %>
</tbody>
<% end %>
<% end %>
任何变通办法都将受到赞赏。谢谢。
答案 0 :(得分:0)
将迭代项目放在fields_for
中,如下所示
f.fields_for :project_procurement_management_plans, ppmp do |p|
答案 1 :(得分:0)
猜测你的模型层次结构annual_procurement_plan
有很多project_management_procurement_plans
,而project_management_procurement_plan
有很多items
,表单的一般结构应该是这样的:
<% @annual_procurement_plan.project_management_procurement_plans.each do |ppmp| %>
<%= f.fields_for(:project_management_procurement_plans, ppmp) do |ppmp_f| %>
# any fields for the ppmp
<% ppmp.line_items.each do |item| %>
<%= ppmp_f.fields_for(:line_items, item) do |item_f| %>
# any fields for the line_item, eg
<%= item_f.select :category_id, Category.all.map{ |c| [c.code, c.id] } %>
<% end %>
<% end %>
<% end %>
<% end %>
在每种情况下,循环遍历关联中的每个对象,并为每个对象调用fields_for
(使用关联作为第一个参数,将实际对象作为第二个参数)。所以你循环遍历ppmp
,为每个fields_for
调用ppmp
,然后在每个line_items
内,循环遍历所有fields_for
,调用item_f
对于他们每个人。
确保在添加字段时使用正确的表单构建器(例如line_item
用于pmpp_f
字段,pmpp
用于{{1}}字段。< / p>