1

モデルのネストされた属性を編集しようとしています。ここで概要を説明し、ここで複製します。

    <%= form_for @person do |person_form| %>
      <%= person_form.text_field :name %>
      <% for address in @person.addresses %>
        <%= person_form.fields_for address, :index => address do |address_form|%>
          <%= address_form.text_field :city %>
        <% end %>
      <% end %>
    <% end %>

私のコードには、次のものがあります。

<%= form_for(@meal) do |f| %>
  <!-- some other stuff that's irrelevant... -->

      <% for subitem in @meal.meal_line_items %>
         <!-- # Edit 2: I need to display information here about the subitem
              Which I can't find a way to pass it to the partial, or work in 
              this manner for existing items
         -->
         <%= subitem.food.name %>
         <%= subitem.food.calories %>

         <%= f.fields_for subitem, :index => subitem do |line_item_form| %>
            <%= line_item_form.label :servings %><br/>
            <%= line_item_form.text_field :servings %><br/>
            <%= line_item_form.label :food_id %><br/>
            <%= line_item_form.text_field :food_id %><br/>
         <% end %>
      <% end %>

      <%= f.submit %>
<% end %>

これはうまく機能しますが、HTML を見ると、次のような入力が作成され、正しい ID の入力に失敗し、代わりにモデルのメモリ表現 (?) が配置されます。その結果、更新は失敗します。

<input type="text" value="2" size="30" name="meal[meal_line_item][#<MealLineItem:0x00000005c5d618>][servings]" id="meal_meal_line_item_#<MealLineItem:0x00000005c5d618>_servings">

編集: このメソッドでそれを実行しようとしている理由は、既存の食事ライン項目の関連付けに関する情報を収集する必要があるためです。たとえば、コードを取り出した領域には、次のようなコードがあります。

<%= subitem.food.name %>
<%= subitem.food.calories %>

少なくとも私の試行では、パーシャルを含むフォームビルダーを使用している場合、この情報を取得することはできません。

編集 2:* コード内の編集を参照してください。これが私のMealLineItemです

class MealLineItem < ActiveRecord::Base
  # Associations ---------------------
  belongs_to :food
  belongs_to :meal
end

そして、モデルの食事accepts_nested_attributes。ご覧のとおり、食品モデルと食事モデルの両方に属しています。既存の food_line_item については、次のようにする必要があります。

meal_line_item.food.name
4

3 に答える 3

3

f.から抜けてい<%= fields_forますか?

- 編集

やってみました:

<%= f.fields_for 'meal[meal_line_item][]', subitem do |line_item_form| %>

- 編集

ドキュメントは、ループなしでも動作するはずだと言っています:

<%= form_for(@meal) do |f| %>
  <!-- some other stuff that's irrelevant... -->

  <%= f.fields_for :meal_line_items do |line_item_form| %>
    <%= line_item_form.label :servings %><br/>
    <%= line_item_form.text_field :servings %><br/>
    <%= line_item_form.label :food_id %><br/>
    <%= line_item_form.text_field :food_id %><br/>
  <% end %>

  <%= f.submit %>
<% end %>
于 2011-01-05T07:51:28.363 に答える
1

これをテストする必要がありますが、おそらくこのアプローチですか?

_形

<%= form.fields_for :meal_line_items do |meal_line_item_form| %>
 <% @meal.meal_line_items.each do |meal_line_item| %>
  <%= render :partial => "meal_line_items/meal_line_item", :locals => { :meal_line_item_form => meal_line_item_form, :meal_line_item => meal_line_item } %>
 <% end %>
<% end %>

食事ラインアイテム/_食事ラインアイテム.erb

<%= meal_line_item_form.label :servings %><br/>
<%= meal_line_item_form.text_field :servings %><br/>
<%= meal_line_item_form.label :food_id %><br/>
<%= meal_line_item_form.text_field :food_id %><br/>

編集

formbuilder イテレータを直接設定する例へのリンクを次に示します (ただし、Rails 2.3.8)。Outbreak -> Incidents -> Location 間の関連付けは、Meal -> Meal_line_items -> Food の関連付けと似ている必要があります。

accept_nested_attributes_for パーシャルの AJAX 更新

于 2011-01-05T14:51:04.903 に答える
0

高低を検索した後、エラーを見つけました。パーシャルを変更していて NameError を受け取っていましたが、ヘルパー メソッドからパーシャルを呼び出していたためです。次の質問で述べたのとまったく同じ問題です。

rails fields_for render partial で複数のローカルが未定義の変数を生成する

于 2011-01-05T16:29:22.787 に答える