rails 3 habtm只删除关联

时间:2011-02-14 15:57:44

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

class Company
  has_and_belongs_to_many :users
end

class User
  has_and_belongs_to_many :companies
end

当我删除公司时,删除该公司用户的关联的最佳(推荐)方法是什么? (我的意思不是实际用户,只有关联)

3 个答案:

答案 0 :(得分:18)

我更喜欢以下内容,因为它将模型逻辑保留在模型中。我不明白为什么ActiveRecord不会这样做。无论如何,在两个连接的模型中,我添加了以下回调。

before_destroy {|object| object.collection.clear}

所以在你的例子中:

class Company
  has_and_belongs_to_many :users
  before_destroy {|company| company.users.clear}
end

class User
  has_and_belongs_to_many :companies
  before_destroy {|user| user.companies.clear}
end

在关于在集合关联上执行级联删除的许多讨论中,许多人声明HABTM关联已经死亡并且建议使用has_many:through。我不同意。使用有意义的东西。如果关联没有内在属性,则使用HABTM。

答案 1 :(得分:17)

答案 2 :(得分:12)

如果您调用destroy而不是delete,则会自动删除关联。