2017-03-14 9 views
0

私はUserに属しているモデルNotificationを持っています。 Notificationの属性はuser_idnotified_by_idであり、一意のUserのIDを持ち、user_idは通知を受信したユーザーを表し、notified_by_idは通知を作成したユーザーを表します。Rails:依存する:複数のキーに基づいて破壊する

Userが削除された場合、作成した通知と受信した通知を破棄したいと考えています。私のUserモデルでは、私は破壊の依存関係を指定します。

has_many :notifications, dependent: :destroy 

しかし、これはのみ削除Userを一致user_idを持ってNotificationsを破壊します。 Userによって作成された通知(notified_by_idUser.idに等しい)は削除されません。

2つのフィールドに基づいて破棄の依存関係を指定するにはどうすればよいですか?代わりに、以下のようにbefore_destroyを使用する必要がありますか?

before_destroy :clean_notifications 

    def clean_notifications 
    Notification.where(notified_by_id: self.id).destroy_all 
    end 

私はすぐにこの問題を解決することができますが、もっと適切な方法があると思います。どんな指導も非常に感謝しています。

答えて

1

あなたは働いuser.rb

has_many :incoming_notifications, class_name: "Notification", 
         foreign_key: "notified_by_id", dependent: :destroy 
+0

で1行を追加することができます!ありがとうございました。 – Ladybro