У меня возникают проблемы с пониманием того, почему "save" и "create" должны отличаться при использовании этих моделей с accepts_nested_attributes_for. Это мои модели:
class Book < ActiveRecord::Base
has_many :pages
has_many :picture_pages, :through => :pages, :source => :pagetype, :source_type => 'PicturePage'
accepts_nested_attributes_for :picture_pages
end
class PicturePage < ActiveRecord::Base
has_one :page, :as =>:pagetype
has_one :book, :through => :pages
accepts_nested_attributes_for :page
end
class Page < ActiveRecord::Base
belongs_to :book
belongs_to :pagetype, :polymorphic => true, :dependent => :destroy
end
Прежде всего, используя метод сохранения ....
b = Book.first
params = { "page_attributes"=> { "number"=>"1" }}
p = b.picture_pages.new(params)
p.save
... все работает так, как вы ожидаете. Rails автоматически создаст новый PicturePage с соответствующей моделью объединения страниц с назначенным атрибутом «число». Отлично. Но если я сделаю это:
b = Book.first
params = { "page_attributes"=> { "number"=>"1" }}
p = b.picture_pages.create(params)
... Rails создаст ДВЕ модели соединения, одна из которых будет полностью пустой, а другая с атрибутом числа. Почему это?
Это серьезная проблема, если я хочу использовать accepts_nested_attributes_for для модели книги, потому что тогда модель Book автоматически вызовет «создание» в моделях PicturePage, которые она создает.
Какие-нибудь советы? Это ошибка в Rails?