maeshimaの日記

メモ書きです

今週の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した時に指定した子が削除できるようになる。