Rails 3 habtm 仅删除关联

发布于 2024-10-17 11:35:31 字数 188 浏览 5 评论 0原文

class Company
  has_and_belongs_to_many :users
end

class User
  has_and_belongs_to_many :companies
end

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

class Company
  has_and_belongs_to_many :users
end

class User
  has_and_belongs_to_many :companies
end

when i delete a company, what's the best (recommended) way to delete ONLY the associations of the users from that company? (i mean not the actual users, only the associations)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

櫻之舞 2024-10-24 11:35:31

我更喜欢以下内容,因为它将模型逻辑保留在模型中。我不明白为什么 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。

I prefer the following since it keeps model logic in the model. I don't understand why ActiveRecord doesn't just do it. Anyway, in both joined models, I add the following callback.

before_destroy {|object| object.collection.clear}

So in your example:

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

In a lot of discussions around doing a cascade delete on a collection association, many people declare the HABTM association dead and recommend has_many :through instead. I disagree. Use whatever makes sense. If the association has no intrinsic attributes, then use HABTM.

世界如花海般美丽 2024-10-24 11:35:31

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

If you call destroy instead of delete, associations will be deleted automatically.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文