Rails 3.2中的fields_for block和non fields_for块的组合

时间:2013-04-18 06:09:32

标签: ruby-on-rails

我正在尝试创建一个包含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 %>

任何变通办法都将受到赞赏。谢谢。

2 个答案:

答案 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>