对于常规的has_many
,有选项:dependent => :destroy
以在删除父记录时删除相关联的关系。但是,使用has_many :through
时,可能会存在其他与子记录相关联的父级,因此:dependent => :destroy
没有任何效果。
如何确保在最后一个HMT关联中孤立的子记录被删除?
对于常规的has_many
,有选项:dependent => :destroy
以在删除父记录时删除相关联的关系。但是,使用has_many :through
时,可能会存在其他与子记录相关联的父级,因此:dependent => :destroy
没有任何效果。
如何确保在最后一个HMT关联中孤立的子记录被删除?
我找到的解决方案似乎是使用after_destroy
回调,例如:
class Parent < ActiveRecord::Base
has_many :children, :through => :parentage
after_destroy :destroy_orphaned_children
private
def destroy_orphaned_children
children.each do |child|
child.destroy if child.parents.empty?
end
end
end
在联结模型中使用"belongs_to :model, dependent: :destroy"
例如,如果您想在医生被删除后同时销毁患者,而且医生通过预约拥有多个患者
Class Appointment
belongs_to :doctor
belongs_to :patient, dependent: :destroy
Class Doctor
has_many :appointments, dependent: :destroy
has_many :patients, through: :appointments
Class Patient
has_many :appointments
has_many :doctors, through: :appointments
has_many:appointments
关系上都设置dependent::destroy
是有意义的,但仅限于此。 - Louis Sayers
has_many :through
关联;我在通过模型上调用了destroy
,但我想删除可能被孤立的关联另一侧的任何模型。我将这段代码放在我的通过模型中,并且由于要被销毁的端点模型只是一个belongs_to
,所以我删除了包装的each
调用。感谢你给我指明正确的方向。 - Ben Kreeger