interlude

プログラミングや私的なこと

railsのaccepts_nested_attributes_forでhas_oneな時の注意点

Railsでモデル同士がhas_oneの関連を持っている時、buildしようとしたらundefined buildと怒られたので原因を調査したところ、子モデルをbuildしたい時は以下のようにすることが分かった。

has_many → 親.子.build
has_one → 親.build_子

例えばUserという親モデルにItemという子モデルがhas_oneで関連を持っている場合は、user.build_itemとすることでbuildできる。

class User < ActiveRecord::Base 
  has_one :item, :dependent => :destroy
  accepts_nested_attributes_for :item
end

class Item < ActiveRecord::Base  
  belongs_to :user
end

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#M001834