Как мне создать вложенную форму, используя встроенные ресурсы Mongoid в Rails 3? - PullRequest
8 голосов
/ 14 июля 2011

У меня есть модель рецепта, в которую встроены ингредиенты с использованием Mongoid.

class Recipe
  include Mongoid::Document
  include Mongoid::Timestamps

  field :title, :type => String
  embeds_many :ingredients

  accepts_nested_attributes_for :ingredients, :reject_if => lambda { |a| a[:title].blank? }, :allow_destroy => true

  validates :title, :presence => true
end

class Ingredient
  include Mongoid::Document
  field :name, :type => String
  field :quantity, :type => String

  embedded_in :recipe, :inverse_of => :ingredients
end

Я хочу иметь возможность создавать новый рецепт и связанные с ним ингредиенты для этого рецепта одновременно, но я изо всех сил пытаюсь понять, как мне поступить так.Это то, что у меня до сих пор:

_form.html.erb - Используется в представлениях рецептов

<%= form_for @recipe do |f| %>  
...
  <li>Title: <%= f.text_field :title %></li>

  <% f.fields_for :ingredients do |builder| %>
    <%= render "ingredient_fields", :f => builder %>
  <% end %>
...
<%= f.submit %>

_ingredient_fields.html.erb

<%= f.text_field :name %>

Recipe Controller

def new
  @recipe = Recipe.new
  @ingredient = @recipe.ingredients.build
end

def create
  @recipe = Recipe.new(params[:recipe])


  if @recipe.save
    redirect_to @recipe, notice: 'Recipe was successfully created.'
  else
    render action: "new"
  end
end

Контроллер ингредиентов

def new
  @recipe = Recipe.find(params[:recipe_id])
  @ingredient = @recipe.ingredients.build
end

def create
  @recipe = Recipe.find(params[:recipe_id]) 
  @ingredient = @recipe.ingredients.build(params[:ingredient]) 
  # if @recipe.save 
end

Отображает форму новых ингредиентов, но нет полей для ингредиентов.Кто-нибудь может подсказать, что я делаю неправильно?

Ответы [ 2 ]

8 голосов
/ 12 сентября 2011

Когда вы показываете вложенную форму, попробуйте использовать (обратите внимание на равно):

<%= f.fields_for

Вместо

<% f.fields_for

См. Этот вопрос .

2 голосов
/ 11 июля 2012

У меня недавно была очень похожая проблема. Я нашел этот похожий вопрос, размещенный на трекере Mongoid проблем на Github, очень полезным:

https://github.com/mongoid/mongoid/issues/1468#issuecomment-6898898

Тощий, что линия

= f.fields_for :ingredients do |builder|

должно выглядеть так:

= f.fields_for @recipe.ingredients do |builder|
...