Rails4 1つのモデルに対して複数の参照がある場合のdependent destroy
ユーザーの組み合わせを定義したモデルをつくり、複数の参照を設定していた。
dependent destroyを設定しようとして躓いたので、メモ。
combinationモデルでは、user_idとpartner_idがuserモデルを参照しているものとする。
当初下記のように記載していた。
user.rb
has_many :combinations
combination.rb
belongs_to :user belongs_to :partner_user, class_name: 'User', foreign_key: "partner_id"
ここで、ユーザーが削除されたら組み合わせも削除しようと、user.rbを下記のように修正した。
has_many :combinations, dependent: :destroy
すると、ユーザーを削除した場合、user_idが一致するデータは削除されるが、partner_idが一致するデータは削除されなかった。
次のように修正するとうまくいった。
user.rb
has_many :combinations, dependent: :destroy has_many :partner_combinations, class_name: 'Combination', foreign_key: 'partner_id', dependent: :destroy
combination.rb
belongs_to :user belongs_to :partner_user, class_name: 'User', foreign_key: 'partner_id'