Rails的嵌套属性不会插入正确的ID

问题描述:

我试图编辑模型的嵌套属性,多为轮廓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时,它创建的输入如下所示,未能输入正确的ID,而是放置模型的内存表示(?)。其结果是,更新失败:

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

编辑: 我试图做到这一点在这种方法的原因是,我需要收集现有meal_line_items协会的一些信息。例如,在我拿出区域内代码的,我有一些代码的效果:

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

获取此信息,如果我使用的形式建设者的谐音,至少,没有将无法正常工作我的试炼。

编辑2:* 请参阅代码中的编辑。这里是我的MealLineItem

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

并为模型的用餐accep_nested_attributes。正如你可以看到它属于食物和膳食模型。对于现有meal_line_item我需要做的是这样的:

meal_line_item.food.name 

寻找高和低后,我发现了错误。虽然我修改的部分,并接收NameError这是因为我在呼唤,从一个辅助方法的部分 - 也就是在以下问题表示了同样的问题:

rails fields_for render partial with multiple locals producing undefined variable

f.<%= fields_for失踪?

--edit

你试过:

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

--edit

文件说,它应该不循环工作太:

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

我错过复制F。当复制代码从尝试不同的东西:( – MunkiPhD 2011-01-05 12:30:47

+0

好吧,所以它没有解决问题? – Heikki 2011-01-05 12:31:47

+0

没有。作为参考,没有f。输入本质上并没有说明他们是'餐'的一部分,并且以下面的id结尾:__mealLineItem:0x00000005c5d618> _servings – MunkiPhD 2011-01-05 12:47:22

一定要考这个但也许这种方法?

_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迭代器(滑轨2.3.8虽然) 。爆发 - >事件 - >位置之间的关联应该类似于Meal - > Meal_line_items - > Food。

AJAX update of accepts_nested_attributes_for partials

+0

如果我照你说的做,当我尝试使用来自meal_line_item的信息时,我得到一个NameError,其中有一个未定义的局部变量,尽管传入的局部变量的名称与局部变量。 – MunkiPhD 2011-01-05 15:42:29

+0

这些模型有这种关联?抱歉格式化...用餐has_many:meal_line_items accep_nested_attributes_for:meal_line_item :::::: Meal_line_item belongs_to:用餐 – Pasted 2011-01-05 15:58:11

+0

是的,但是meal_line_item也属于食物。所以当我想通过该餐点项目上的关联来查看食品时,我无法在部分内容中使用该功能。也许我错误地传递了这些变量,但是你发布的代码对我来说并不适用于当地人,也没有任何其他我尝试过的方法。 – MunkiPhD 2011-01-05 16:01:52