繁体   English   中英

Rails:依赖::销毁 - 这是如何工作的?

[英]Rails: dependent: :destroy - How does this work?

在一个例子中,有一个所有者协会作为研究员:

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

关系的另一面:

class Building < ActiveRecord::Base
  belongs_to :owner
end

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

你可能想要:nullify 有关has_many请参阅 Rails 文档。

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

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

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

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

如果有任何关联的记录, :restrict_with_exception会导致引发异常。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM