在视图中使用fields_for的Rails 3不起作用

gug*_*son 4 ruby-on-rails

我正在尝试使用fields_for以rails形式实现主细节.

我有一个名为Recipe的模型:

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

  has_many :recipe_ingredients 
end
Run Code Online (Sandbox Code Playgroud)

和一个名为RecipeIngredient的模型:

class RecipeIngredient < ActiveRecord::Base
  belongs_to :recipe
  #belongs_to :ingredient
end
Run Code Online (Sandbox Code Playgroud)

在新的控制器中,我用三个空记录填充成分,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

我想在视图中做的是输出食谱字段(工作正常)和配方成分的三个字段.在视图的顶部我有这个:

<%= form_for :rec do |f| %>
Run Code Online (Sandbox Code Playgroud)

然后我列出正确显示的配方字段,如:

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
Run Code Online (Sandbox Code Playgroud)

然后我尝试显示成分行,但代码似乎永远不会进入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%>  
Run Code Online (Sandbox Code Playgroud)

我在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 %>
Run Code Online (Sandbox Code Playgroud)

第三次尝试(根据这里的答案):

<% form_for :recipe do |f| %>
    <% f.fields_for ingredients do |ingredient_form| %>  
      <p>  
      Ingredient: <%= ingredient_form.text_field :description %>  
      </p>  
    <% end %> 
<% end %>
Run Code Online (Sandbox Code Playgroud)

有什么明显的东西我做错了吗?

Phi*_*avo 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 %>
Run Code Online (Sandbox Code Playgroud)


Jes*_*ott 5

切换到

<% form_for :recipe do |f| %>
    <% f.fields_for :ingredients do |ingredient_form| %>  
      <p>  
      Ingredient: <%= ingredient_form.text_field :description %>  
      </p>  
    <% end %> 
<% end %>
Run Code Online (Sandbox Code Playgroud)