Rails 3 с использованием fields_for в представлении не работает - PullRequest
4 голосов
/ 25 сентября 2010

Я пытаюсь реализовать основные детали в форме рельсов с 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 %>

Есть ли что-то очевидное, что я делаю неправильно?

Ответы [ 2 ]

27 голосов
/ 01 сентября 2012

Вы должны использовать <% = </strong> вместо <% при использовании <strong>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 %>
5 голосов
/ 25 сентября 2010

Переключите на

<% form_for :recipe do |f| %>
    <% f.fields_for :ingredients do |ingredient_form| %>  
      <p>  
      Ingredient: <%= ingredient_form.text_field :description %>  
      </p>  
    <% end %> 
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...