如果我正确阅读了 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 数据库一起使用。