2

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

4

0 回答 0