Я пытаюсь реализовать главную деталь в форме рельсов с полями_for.Rails 3 using fields_for in view не работает
Я одна модель под названием Рецепт:
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
В новом контроллере я заполнить ингредиенты с тремя пустыми записями, как это:
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
Что бы я хотел сделать в представлении, это вывести поля рецептов (которые работают s ok) и три поля для ингредиентов рецепта. В верхней части представления у меня есть это:
<%= 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, похоже, повторяются три раза, но код внутри полей не запускается.
Вторая попытка:
<% 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 %>
Есть ли что-то очевидно, что я делаю неправильно?
Спасибо за t он отвечает. У меня это выше: <% = form_for (@recipe) do | f | %> При попытке вашего кода я получаю следующую ошибку: неопределенная локальная переменная или метод 'components 'для # <# <Класс: 0x00000101e9fd20>: 0x00000101e9b900> – gugguson
@gugguson - у меня были« ингредиенты », но означало«: ингредиенты "- ингредиенты символа скажут form_for (рецепт), чтобы вызвать массив ингредиентов. –
Отлично - это сработало. Спасибо за помощь. Небольшой вопрос: как я могу использовать его в представлении «Показать»? – gugguson