如果我已正确读取rails指南,则返回false的before_destroy回调将通过发出回滚命令来停止对象的销毁。
然而,当对象本身没有被删除时,我发现该对象上的HABTM关系中的所有对象都是。我怎样才能阻止这种情况发生?
这是适当的代码块:
class UserGroup < ActiveRecord::Base
# Associations
has_and_belongs_to_many :users, :join_table => "user_group_membership"
attr_protected :is_default
# Callbacks
before_destroy :destroy_associations
def destroy_associations
if self.is_default?
errors.add(:base,"You can't delete the default")
return false
end
self.users.clear
end
end
现在当我在“is_default”组上调用destroy时,我得到了添加到基类的正确错误消息,UserGroup对象没有被销毁,但是:users集合中的每个关联都被清除。
我知道代码“self.users.clear”从未到过 - 为什么我会丢失我的HABTM系列?
如果有帮助,我使用JRuby 1.9和mssql数据库。