依赖:: destroy - 这是如何工作的?

Joh*_*ohn 3 dependencies database-design ruby-on-rails associations

在一个例子中,所有者的关联是作为研究员:

class Owner < ActiveRecord::Base
  has_many :buildings, dependent: :destroy 
end
Run Code Online (Sandbox Code Playgroud)

关系的另一面:

class Building < ActiveRecord::Base
  belongs_to :owner
end
Run Code Online (Sandbox Code Playgroud)

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

Phi*_*rom 8

你可能想要:nullify.请参阅Rails文档has_many.

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

:destroy 导致所有相关对象也被销毁.

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

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

:restrict_with_exception 如果存在任何关联记录,则会引发异常.

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

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