2011-01-05 2 views
1

Я пытаюсь редактировать вложенные атрибуты, которые модели, сколько набросков here, воспроизводились здесь:Rails Вложенные атрибуты не вставляет ID Правильно

<%= 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: Поэтому я пытаюсь сделать это в этом методе является то, что мне нужно собрать некоторую информацию об ассоциациях для существующих meal_line_items. Например, в районе, где я вынул код, у меня есть некоторый код для эффекта:

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

Получение этой информации не будет работать, если я использую форму строитель с частичными, по крайней мере, не в мои испытания.

Редактировать 2: * См. Изменение в коде. Вот мой MealLineItem

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

И еда accepts_nested_attributes для модели. Как вы можете видеть, это относится как к модели еды, так и к еде. Для существующего meal_line_item мне нужно сделать что-то вроде:

meal_line_item.food.name 

ответ

0

После поиска высоко и низко, я нашел ошибку.Хотя я модифицирования парциальное и получал NameError это потому, что я звоню парциальное от вспомогательного метода - точно такая же проблема, как указано в следующем вопросе:

rails fields_for render partial with multiple locals producing undefined variable

3

Есть f. отсутствует <%= fields_for?

--edit

Вы пробовали:

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

--edit

Docs говорят, что он должен работать без петли тоже:

<%= 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 %> 
+0

я пропустил копирование п. при копировании кода из разных способов :( – MunkiPhD

+0

Итак, это не решило проблему? – Heikki

+0

Нет. Для справки, без ф. входы по существу не утверждают, что они являются частью «Питание», и заканчивается следующим id: meal_line_item _ # _servings – MunkiPhD

1

Придется проверить это но, может быть, этот подход?

_form

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

meal_line_items/_meal_line_item.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/> 

EDIT

вот ссылку на пример для установки formbuilder итератор непосредственно (Rails 2.3.8, хотя) , Связи между Outbreak -> Incidents -> Location должны быть похожими на те, которые используются для Meal -> Meal_line_items -> Food.

AJAX update of accepts_nested_attributes_for partials

+0

Если я сделаю так, как вы заявили, я получаю NameError, когда пытаюсь использовать информацию из meal_line_item в частичном высказывании, что есть неопределенная локальная переменная, даже если имя локального переданного объекта совпадает с именем частичного , – MunkiPhD

+0

У моделей есть такая ассоциация? извините за форматирование ... Питание has_many: meal_line_items accepts_nested_attributes_for: meal_line_item :::::: Meal_line_item принадлежит_to: еда – Pasted

+0

Да, но meal_line_item также принадлежит к еде. Поэтому, когда я хочу посмотреть на пункт питания через ассоциацию на этой линии питания, я не могу заставить эту работу работать в частичном. Возможно, я неправильно передаю переменные, но код, который вы опубликовали, не работал для меня с местными жителями, и ни один другой метод, который я пытался. – MunkiPhD

Смежные вопросы