#実行環境
- Ruby 2.2.2
- Rails 4.2.3
#目的
has_manyについての解説はよくあるけれど、has_oneについての解説がほとんど無いので自分なりにまとめる
(と言っても作成と削除のところだけですが)
##model
こんな関係を用意します。
親 has_one パートナー
親 has_many 子
パートナー belongs_to 親
子 belongs_to 親
parent.rb
class Parent < ActiveRecord::Base
has_one :partner
has_many :childs
end
partner.rb
class Partner < ActiveRecord::Base
belongs_to :parent
end
child.rb
class Child < ActiveRecord::Base
belongs_to :parent
end
#コード
##親に関連付けてパートナー、子を作成する場合
それぞれこう書きます。
parents_controller.rb
#関連付けないで作成する場合
Partner.create
Child.create
#has_manyのものを関連付けて作成する場合
@parent.childs.build
#has_oneのものを関連付けて作成する場合
@parent.build_partner
##親とまとめて子を削除する場合
parent.rbにdependent: :destroy
を追加します。
この際、has_oneになっているpartnerについてはclass_nameも追加します。
parent.rb
class Parent < ActiveRecord::Base
has_one :partner, dependent: :destroy, class_name: Partner
has_many :childs, dependent: :destroy
end
親をdestroyするとパートナーと子もdestoryされるようになります。
#参考文献
YOMiTOKU Railsでの似たような言葉での違いメモ
pyar.bz Has-oneが動作しなかったのでclass_nameを追加した