我有這個模型,LeaveManagementRule
。 A Rule
有sender
,receiver
。發送者可以是一個Role
或User
(同樣爲接收器):Rails雙重多態依賴:銷燬沒有正確銷燬
class LeaveManagementRule < ActiveRecord::Base
belongs_to :sender, polymorphic: true # Sender can be a Role or a User
belongs_to :receiver , polymorphic: true # receiver can be a Role or a User
...
end
這裏是User
模型:
class User < ActiveRecord::Base
has_many :leave_management_rules, as: :sender, dependent: :destroy
has_many :leave_management_rules, as: :receiver, dependent: :destroy
...
end
的Role
模型是相同的用戶模型。爲了這個問題的目的,我不覺得需要詳細說明。
這裏是leave_management_rules
表的數據庫的摘錄:
mysql> select * from leave_management_rules;
+----+-----------+-------------+--------+-------------+---------------+------------+
| id | sender_id | sender_type | action | receiver_id | receiver_type | project_id |
+----+-----------+-------------+--------+-------------+---------------+------------+
| 1 | 56 | User | 1 | 19 | Role | 33 |
| 2 | 146 | User | 2 | 56 | User | 33 |
+----+-----------+-------------+--------+-------------+---------------+------------+
我們將專注於user_id: 56
,它出現在兩個項目在這裏(作爲sender
入境1,作爲receiver
爲條目2)。現在
,我試圖刪除用戶56我的Rails控制檯:
irb(main):020:0> u = User.find(56)
irb(main):021:0> u.destroy
所以,我希望我的leave_management_rules
表,現在是空的。但還有一個條目:
mysql> select * from leave_management_rules;
+----+-----------+-------------+--------+-------------+---------------+------------+
| id | sender_id | sender_type | action | receiver_id | receiver_type | project_id |
+----+-----------+-------------+--------+-------------+---------------+------------+
| 1 | 56 | User | 1 | 19 | Role | 33 |
+----+-----------+-------------+--------+-------------+---------------+------------+
有沒有什麼我在做我的代碼錯了?
我正在Rails 4.2.4
謝謝你這些細節,不幸的是,我不認爲我會反應堆我的整個代碼結構,我有近完成了它的發展和幾個模型取決於它。它工作得很好,從依賴appart:消滅回調只被調用一次。我想我會調用before_destroy上的自定義方法來手動觸發預期的過程... – ste26054