0

我正在尝试使用 fields_for 块和非 fields_for 块的组合创建一个表单:

但是输出在重复,看起来它们在循环......

也许是因为,有一个 fields_for 块,而另一个不是 fields_for / 表单。

我怎样才能在我的<tbody>or<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 %>

任何解决方法将不胜感激。谢谢你。

4

2 回答 2

0

fields_for像这样将迭代项放在你的

f.fields_for :project_procurement_management_plans, ppmp do |p|
于 2013-04-18T07:24:19.060 回答
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(将关联用作第一个参数,将实际对象用作第二个参数)。因此,您循环遍历ppmps,调用fields_for它们中的每一个,然后在 each 内部ppmp,循环遍历所有它line_items,调用fields_for它们中的每一个。

确保在添加字段时使用正确的表单构建器(即item_f字段line_item和字段)pmpp_fpmpp

于 2013-04-18T07:25:08.373 回答