Я пытаюсь реализовать основные детали в форме рельсов с fields_for.
У меня есть одна модель с именем Recipe:
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
В новом контроллере я заполняю ингредиенты тремя пустыми записями, такими какthis:
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 %>
Есть ли что-то очевидное, что я делаю неправильно?