【问题标题】:Rails: dependent: :destroy - How does this work?Rails:dependent::destroy - 这是如何工作的?
【发布时间】:2014-01-21 19:39:27
【问题描述】:

在一个所有者关联的示例中:

class Owner < ActiveRecord::Base
  has_many :buildings, dependent: :destroy 
end

关系的另一面:

class Building < ActiveRecord::Base
  belongs_to :owner
end

如果我要删除一个所有者,它是否也会破坏相关的建筑物?如果我删除所有者,如何指定依赖关系,以便所有者和主键不再与任何建筑物相关联?

【问题讨论】:

    标签: ruby-on-rails database-design dependencies associations


    【解决方案1】:

    你可能想要:nullify。请参阅 Rails 文档以获取 has_many

    :dependent 控制关联对象在其所有者被销毁时发生的情况。请注意,这些都是作为回调实现的,Rails 会按顺序执行回调。因此,其他类似的回调可能会影响 :dependent 行为,而 :dependent 行为可能会影响其他回调。

    :destroy 导致所有关联对象也被销毁。

    :delete_all 会直接从数据库中删除所有关联的对象(因此不会执行回调)。

    :nullify 导致外键设置为 NULL。不执行回调。

    :restrict_with_exception 会在有任何关联记录时引发异常。

    :restrict_with_error 如果有任何关联对象,则会将错误添加到所有者。

    如果与:through 选项一起使用,连接模型上的关联必须是belongs_to,并且被删除的记录是连接记录,而不是关联记录。

    【讨论】:

      【解决方案2】:
      1. 是的,它将删除指定的依赖:destroy 的关联建筑物。
      2. 如果要保留建筑物记录,建议使用join表,这样删除owner时,只删除join表中的记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多