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'

参考:
複数の外部キーに対してdependent=>nullifyする方法 | Geekの逆襲