0

fields_for ブロックと非 fields_for ブロックの組み合わせでフォームを作成しようとしています:

しかし、出力は繰り返されており、ループしているように見えます...

おそらく、fields_for ブロックがあり、もう一方が fields_for / フォームではないためです。

<tbody>or<tr>タグ内でそれらの 2 つを組み合わせるにはどうすればよいですか。

<% @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

モデルの階層構造にmany があり、annual_procurement_planmanyがあると推測すると、フォームの一般的な構造は次のようになります。project_management_procurement_plansproject_management_procurement_planitems

<% @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(関連付けを最初の引数として使用し、実際のオブジェクトを 2 番目の引数として使用します)。したがって、ppmpsをループしfields_forてそれぞれを呼び出し、次に each 内ppmpですべての をループして、それぞれをline_items呼び出しfields_forます。

フィールドを追加するときは、正しいフォーム ビルダーを使用していることを確認してください (つまり、 item_fforフィールドline_itempmpp_fforpmppフィールド)。

于 2013-04-18T07:25:08.373 に答える
0

fields_forこのように反復項目を配置します

f.fields_for :project_procurement_management_plans, ppmp do |p|
于 2013-04-18T07:24:19.060 に答える