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