2010-09-25 31 views
4

我想實現帶有fields_for的rails形式的主細節。Rails 3使用fields_for在視圖中不起作用

我稱之爲一種模式方藥:

class Recipe < ActiveRecord::Base 
    validates :name, :presence => true 
    validates :directions, :presence => true 

    has_many :recipe_ingredients 
end 

和一個模式叫RecipeIngredient:

class RecipeIngredient < ActiveRecord::Base 
    belongs_to :recipe 
    #belongs_to :ingredient 
end 

在新的控制器I填充成分與三個空的記錄是這樣的:

def new 
    @recipe = Recipe.new 
    3.times {@recipe.recipe_ingredients.build} 
    # @ingredients = RecipeIngredient.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @recipe } 
    end 
    end 

我想在視圖中做的是輸出食譜字段(哪些工作沒關係)和配方原料的三個領域。在視圖的上半部分我有這樣的:

<%= form_for :rec do |f| %> 

我然後列出其正確顯示,如配方領域:

<div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 

然後我嘗試顯示配料線路,但代碼永遠不會似乎進入了fields_for部分:

第一次嘗試:

<% for ingredient in @recipe.recipe_ingredients %> 
    This prints out three times 
    <% fields_for "...", ingredient do |ingredient_form| %> 
     But this never prints out 
     <p> 
     Ingredient: <%= ingredient_form.text_field :description %> 
     </p> 
    <% end %> 
    <% end%> 

我有recipe_ingredients中的三個空行和for循環似乎迭代了三次,但fields_for中的代碼從不觸發。

第二個嘗試:

<% for recipe_ingredient in @recipe.recipe_ingredients %> 
    b 

    <% fields_for "...", recipe_ingredient do |recipe_ingredient| %> 
     Rec: <%= recipe_ingredient.text_field :description %> 
    <% end %> 
    <% end %> 

第三次嘗試(基於這裏的答案):

<% form_for :recipe do |f| %> 
    <% f.fields_for ingredients do |ingredient_form| %> 
     <p> 
     Ingredient: <%= ingredient_form.text_field :description %> 
     </p> 
    <% end %> 
<% end %> 

有什麼明顯的,我做錯了什麼?

回答

5

切換它到

<% form_for :recipe do |f| %> 
    <% f.fields_for :ingredients do |ingredient_form| %> 
     <p> 
     Ingredient: <%= ingredient_form.text_field :description %> 
     </p> 
    <% end %> 
<% end %> 
+0

謝謝t他回答。 我上面有這個: <%= form_for(@recipe)do | f | %> 當我嘗試你的代碼中,我得到以下錯誤: 未定義的局部變量或方法'成分爲#<#<類別:0x00000101e9fd20>:0x00000101e9b900> – gugguson 2010-09-25 13:33:10

+0

@gugguson - 我有‘成分’,而是指「:成分「 - 符號成分會告訴form_for(食譜)調用成分數組。 – 2010-09-25 20:46:21

+0

太棒了 - 工作。感謝您的幫助。小問題:我將如何去在Show視圖中使用它? – gugguson 2010-09-25 21:40:09

27

使用的form_forfields_for

時,應使用的<%<%=,而不是正確的代碼應該是這樣的:

<%= form_for :recipe do |f| %> 
    <%= f.fields_for :ingredients do |ingredient_form| %> 
     <p> 
     Ingredient: <%= ingredient_form.text_field :description %> 
     </p> 
    <% end %> 
<% end %> 
+0

我不明白爲什麼我的代碼不工作。只有當我把<%=它開始工作。那謝謝啦! :) – 2012-10-27 14:31:01

+0

+1謝謝,這只是讓我有些頭痛。 – 2012-12-18 18:55:02

+0

但是,在Rails 2中,您不應該使用等號。我無法從Rails的文檔中找到源代碼,但是這裏有一些鏈接來演示其他人如何運用Rails 2 http://ruby.railstutorial.org/chapters/sign-up#sec-using_form_for和http:/ /stackoverflow.com/questions/9459002/getting-fields-for-to-work-with-has-many-relationship – KDP 2013-09-23 12:14:01

相關問題