2011-01-05 64 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時,它創建的輸入如下所示,未能輸入正確的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 

回答

3

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

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迭代器(滑軌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