我正在尝试使用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_for和fields_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)
切换到
<% 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)
| 归档时间: |
|
| 查看次数: |
12423 次 |
| 最近记录: |