find_or_create_by
Rails 4.0 で非推奨になるため、更新された Rails 3.2 構文を使用しています。重要なことは、次のようaccepts_nested_attributes_for
にMovieモデルに を含めることです。
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
保存された後movie_id
、写真レコードのフィールドにその ID が配置されます。親の前に子を保存することはできません。使用する ID がわからないためです。
Rails 3.2 より前のバージョンを使用している場合は、次のようになります。
@movie = Movie.find_or_create_by_title "W00t!", :director => 'Steven Speilberg',
:photos_attributes => [{
:caption => "Thrilling!"
}]