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
と言う風に、関連テーブルもチェックしてくれる模様。