我使用的是最新的Rails 3.2的語法find_or_create_by
,因爲它會在Rails的4.0被棄用。最重要的是有accepts_nested_attributes_for
在電影模型像這樣:
class Movie < ActiveRecord::Base
has_many :photos
accepts_nested_attributes_for :photos
end
這使您可以指定與形式<relation-name>_attributes
模型中的關鍵屬性,你的情況photo_attributes
。
@movie = Movie.where(:title => 'foo').first_or_create :director => 'Steven Speilberg',
:photos_attributes => [{
:caption => "Thrilling!"
}]
@movie.save
在此之後,您只需保存父模型,而且會自動在你的情況再次的照片保存在兒童模特。有必要先保存父母,因爲孩子需要知道要放入子記錄的ID。因此在保存@movie
之後,它會將其ID置於照片記錄的movie_id
字段中。它不能在父母之前保存孩子,因爲那樣它就不知道要使用什麼ID。
如果你使用一個Rails 3.2版之前,它會是這個樣子:
@movie = Movie.find_or_create_by_title "W00t!", :director => 'Steven Speilberg',
:photos_attributes => [{
:caption => "Thrilling!"
}]
我得到一個'ActiveRecord :: UnknownAttributeError:未知屬性:photo_attributes'與您的解決方案。 – Martin
好吧,自從'電影has_many:照片'它結束了使用複數和添加照片作爲一個陣列:'photos_attributes:[{name:'bar'}]]) – Martin
啊,是的,對不起。我已經更新了上面的代碼以反映出這個問題,以防其他人遇到此問題。祝你好運! – adimitri