has_manyな子テーブルにデータを作成するbuildメソッド

先ほど新人から質問に来られて、buildの使い方で悩んでると聞かれたのですが、
「buildってあったっけ?newじゃね?」って状態でした。


そして色々と検証すると面白いメソッドだと分かったので紹介

class Parent < ActiveRecord::Base
  has_many :childs
end
class Child < ActiveRecord::Base
  belongs_to :parent
  has_many :child_childs
end
class ChildChild < ActiveRecord::Base
  belongs_to :child
  validate_presence_of :name
end

という親子関係があったとして

parent = Parent.new
child = parent.childs.build
child_child = chiild.child_childs.build(:name => "test")

とやると、
parent.childs = [child]
child.child_childs = [child_child]
という状態になりました。
そして、parent.saveで、childやchild_childも自動保存。


おお、ちょっと便利だ。
ちなみに、

parent = Parent.new
child = parent.childs.build
child_child = chiild.child_childs.build
p parent.save #=> false

と言う風に、関連テーブルもチェックしてくれる模様。