Долго бьюсь головой об это. На Rails 2.3.2, Ruby 1.9.1.
Попытка использовать одну форму для создания трех объектов, которые имеют следующие отношения:
class Person
has_one :goat
end
class Goat
belongs_to :person
has_many :kids
end
class Goat::Kid
belongs_to :goat
end
Вот краткое изложение схемы:
Person
first_name
last_name
Goat
name
color
Goat::Kid
nickname
age
Я бы хотел, чтобы мое действие #create
создало новые экземпляры всех трех моделей с указанными ассоциациями. Однако, хотя кажется, что мой хэш params передается контроллеру, как и должно (на основе журналов обратной трассировки в браузере, когда он взрывается), объект Goat::Kid
не собирает параметры.
irb (сеанс irb - это просто псевдо-представление того, что я пытаюсь выполнить, поэтому, если оно не вызывает #save!
или какие-либо другие потребности, это не совсем верно. Я пытаюсь сделать это все через браузер / веб-форму.)
a = Person.new :first_name => 'Leopold', :last_name => 'Bloom'
b = Goat.new :name => 'Billy', :color => 'white'
c = Goat::Kid.new :nickname => 'Jr.', :age => 2
a.goat.kids
>> []
Теперь я не могу понять, как заставить представление передавать параметры каждому объекту и заставить контроллер сохранять эти параметры в БД.
Мои вопросы: А) это хорошее место для использования nested_attributes_for
и если да, то как мне объявить это с пространством имен? Б) Есть ли гораздо более простой и понятный способ сделать это?
Передача параметров трем моделям была для меня очень сложной задачей, и независимо от того, сколько документации я прочитал, я не могу обернуть ее вокруг (#form_for
и #fields_for
). Пространство имен еще больше усложняет это. Спасибо за любую помощь!
Приложение: если я в итоге объявлю
accepts_nested_attributes_for
как правильно использовать символьный аргумент для модели пространства имен?
accepts_nested_attributes_for :kids, :through => :goats
или
accepts_nested_attributes_for :goats_kids, :through => :goats
или
accepts_nested_attributes_for :goats::kids, :through => :goats
Я не уверен, как модели пространства имен переводятся в свои идентификаторы символов. Спасибо!