我有这个模型,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