LoginSignup
79
77

More than 5 years have passed since last update.

[Rails] has_oneの使い方(作成と削除)

Last updated at Posted at 2016-02-15

実行環境

  • 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を追加した

79
77
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
77