【问题标题】:rails 3 habtm delete only associationrails 3 habtm 仅删除关联
【发布时间】:2011-02-14 15:57:43
【问题描述】:
class Company
  has_and_belongs_to_many :users
end

class User
  has_and_belongs_to_many :companies
end

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      【讨论】:

      • @ShaChris23 我已将链接更新为官方 API 提供的最新版本。我怀疑他们会很快删除collection.delete,所以这可能是最好的链接。感谢您的提醒。
      • 我应该在哪里打电话?
      • 如果您需要跳过/绕过回调,使用 collection.clear 很有用。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-29
        • 2014-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-21
        • 1970-01-01
        相关资源
        最近更新 更多