我遇到麻煩,理解爲什麼使用這些模型與accept_nested_attributes_for「保存」和「創建」應該有什麼不同。這是我的模型:多個嵌套accept_nested_attributes和「保存」和「創建」之間的區別
所有的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,並且有一個帶有分配的「number」屬性的相應的Page join模型。完善。但是,如果我這樣做:
b = Book.first
params = { "page_attributes"=> { "number"=>"1" }}
p = b.picture_pages.create(params)
... Rails會創建兩個加盟模式,一種是完全空的,一個具有數屬性。爲什麼是這樣?
這是一個主要問題,如果我想在書籍模型上使用accepts_nested_attributes_for,因爲那麼Book模型會在它創建的PicturePage模型上自動調用「create」。
任何提示?這是Rails中的錯誤嗎?