Rails 3:HABTM,destroy和before_destroy回调

时间:2011-09-05 01:32:27

标签: ruby-on-rails-3 jrubyonrails destroy has-and-belongs-to-many

如果我已正确读取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数据库。

0 个答案:

没有答案