1

モデル内で accept_nested_attributes_for メソッドを使用しようとしていますが、別の関連付けによってグループ化されたレコードをレンダリングする必要があります。私はこれを機能させましたが、私が使用した方法は少しハックのようです.

これを構造化するより良い方法はありますか?

私のモデル

  has_many :quantities
  has_many :ingredients, :through => :quantities, :uniq => true
  has_many :sizes, :through => :quantities, :uniq => true
  has_many :photos, :as => :imageable

  accepts_nested_attributes_for :quantities

私の見解

<%= form_for [:admin, @recipe] do |f| %>

    <div class="field">
      <%= f.label :name %><br />
      <%= f.text_field :name %>
    </div>

    <% @recipe.quantities.group_by(&:size).each do |size, quantities| %>
        <h3><%= size.name %></h3>
        <%= f.fields_for :quantities do |builder| %>
            <% if builder.object.size == size %>
          <p>
            <%= builder.text_area :value, :rows => 1 %>
          </p>
          <% end %>
      <% end %>
  <% end %>

    <div class="actions">
        <%= f.submit %>
    </div>

<% end %>
4

1 に答える 1

1

if builder.object.size == sizeこれでその部分を取り除くことができます:

<% @recipe.quantities.group_by(&:size).each do |size, quantities_for_size| %>
  <h3><%= size.name %></h3>
  <%= f.fields_for :quantities, quantities_for_size do |builder| %>
    <p><%= builder.text_area :value, :rows => 1 %></p>
  <% end %>
<% end %>

quantities_for_sizeの 2 番目の引数としてを渡すと、レシピに関連付けられfields_forた全体ではなく、それを使用するようになります。詳細については、#fields_for のドキュメントを参照してください。quantities

于 2013-02-01T21:02:01.693 に答える