Я пытаюсь отредактировать вложенные атрибуты модели, как описано здесь, воспроизведенное здесь:
<%= 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, он создает входные данные, которые выглядят следующим образом, не введя правильный идентификатор и вместо этого помещая представление памяти (?) модели. В результате обновление не выполняется:
<input type="text" value="2" size="30" name="meal[meal_line_item][#<MealLineItem:0x00000005c5d618>][servings]" id="meal_meal_line_item_#<MealLineItem:0x00000005c5d618>_servings">
EDIT: Причина, по которой я пытаюсь сделать это в этом методе, заключается в том, что мне нужно собрать некоторую информацию об ассоциациях для существующих food_line_items. Например, в области, где я вынул код, у меня есть некоторый код для эффекта:
<%= subitem.food.name %>
<%= subitem.food.calories %>
Получение этой информации не сработает, если я использую построитель форм с частичными элементами, по крайней мере, не в своих испытаниях.
Правка 2:* См. правку в коде. Вот мой MealLineItem
class MealLineItem < ActiveRecord::Base
# Associations ---------------------
belongs_to :food
belongs_to :meal
end
И еда принимает_вложенные_атрибуты для своей модели. Как видите, это относится как к еде, так и к модели еды. Для существующего объекта food_line_item мне нужно сделать что-то вроде:
meal_line_item.food.name