今週のrailscasts - Nested Model Form Part 1
has_manyなどでネストされたモデルを一つのフォームで扱うためのaccepts_nested_attributes_forメソッドの使い方について
Railscasts - Nested Model Form Part 1
使い方
has_many(またはhas_one)を宣言したモデルにaccepts_nested_attributes_forを宣言する。
class Member < ActiveRecord::Base has_one :avatar accepts_nested_attributes_for :avatar end
すると親を保存したタイミングで子も一緒に保存される
params = { :member => { :name => 'Jack', :avatar_attributes => { :icon => 'smiling' } } } member = Member.create(params) member.avatar.id # => 2 member.avatar.icon # => 'smiling'
オプション
reject_if
lambdaで条件を指定。条件に合致する子は保存されない
allow_destroy
デフォルトだと親と同時に子を削除することは出来ない。
trueにすると、_deleteという名前のkeyでvalueがtrue相当("1"とかでもいいようだ)の属性を代入してsaveした時に指定した子が削除できるようになる。