問題
User has_many Cup(s)
といった関連のなかで、
Cup.destroy
をしたところUser
までも消えてしまった。
理由については本記事を見てもらえればわかるが、
dependent: :destroy
の付与について時折迷うことがあったので
備忘録として残しておく。
対処
以下のような関連があるとする。
User
User has_many Cup(s)
Cup
Cup belongs_to User
この関連に対し、dependent: :destroy
を以下のように設定していた。
Class User < ApplicationRecord
has_many :cups, dependent: :destroy
end
class Cup < ApplicationRecord
belongs_to :user, dependent: :destroy
end
この状態でCup
(のインスタンス)をdestroy
したところ、
そのユーザまでもが削除されてしまった。
そこで下記のようにbelongs_to
からdependent: :destroy
を
消去したところ、Cup
を消してもそのユーザは残ったままになった。
Class User < ApplicationRecord
has_many :cups, dependent: :destroy
end
class Cup < ApplicationRecord
belongs_to :user
end
:dependentの付与の仕方
has_many
、belongs_to
どちらにdependent: :destroy
をつけるか迷う時があるが、上記より、
dependent: :destroy
を指定したクラスが消えた場合に、
dependent: :destroy
を設定したモデル(のインスタンス)がdestroyされる
ということになる。
具体例
class Cup < ApplicationRecord
belongs_to :user, dependent: :destroy
end
このコードでは、
dependent: :destroy
を指定したクラス:Cup
dependent: :destroy
を設定したモデル(のインスタンス):user
となるので、Cup
が消えるとUser
が消えることになる。
Class User < ApplicationRecord
has_many :cups, dependent: :destroy
end
このコードでは、
dependent: :destroy
を指定したクラス:User
dependent: :destroy
を設定したモデル(のインスタンス):cups
となるので、User
が消えるとCup(s)
が消えることになる。
おわり