Вложенные объектные формы не работают должным образом - PullRequest
3 голосов
/ 24 мая 2010

Я пытаюсь заставить работать вложенные формы моделей . Насколько я могу сказать, я все делаю правильно, но все равно не работает.

Я на Rails 3 beta 3.

Мои модели, как и ожидалось:

class Recipe < ActiveRecord::Base
  has_many :ingredients, :dependent => :destroy
  accepts_nested_attributes_for :ingredients
  attr_accessible :name
end
class Ingredient < ActiveRecord::Base
  attr_accessible :name, :sort_order, :amount
  belongs_to :recipe  
end

Я могу использовать Recipe.ingredients_attributes =, как и ожидалось:

recipe = Recipe.new
recipe.ingredients_attributes = [ {:name=>"flour", :amount=>"1 cup"}, {:name=>"sugar", :amount=>"2 cups"}]
recipe.ingredients.size    # -> 2; ingredients contains expected instances

Однако я не могу создавать новые графы объектов, используя хэш параметров , как показано в документации :

params = { :name => "test", :ingredients_attributes => [ {:name=>"flour", :amount=>"1 cup"}, {:name=>"sugar", :amount=>"2 cups"}] }
recipe = Recipe.new(params)
recipe.name    # -> "test"
recipe.ingredients    # -> []; no ingredient instances in the collection

Я что-то здесь не так делаю? Или есть проблема в бета-версии Rails 3?

Обновление

Это ошибка, вызванная attr_accessible :name в рецепте. Это не специфично для Rails3.

Ответы [ 3 ]

3 голосов
/ 24 мая 2010

Вы пытались сохранить запись и до сих пор не получили ингредиенты? Из приведенного выше примера нет сохранения, поэтому я не верю, что в рецепте есть какие-либо ингредиенты.

В ответ на ваш ответ ниже, я полагаю, вы могли бы добавить ingredients_attributes как attr_accessible.

1 голос
/ 24 мая 2010

Я нашел ответ: присутствие attr_accessible :name в рецепте нарушит ингридиенты ингридиентов (и, следовательно, вложенные модели). Удали его и все работает нормально. Я убедился, что эта ошибка существует, по крайней мере, еще в Rails 2.3.2.

Off для отправки сообщения об ошибке ...

0 голосов
/ 24 мая 2010

Я убедился, что это , а не ошибка в Rails 3; Я построил пример Railscast в 2.3 и 3.0, и он работает так, как объявлено в обоих случаях. Это означает, что это как-то связано с моим кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...