9

使用常规has_many,可以选择:dependent => :destroy在删除父记录时删除关联。使用has_many :through,可能有其他父母与子记录相关联,因此:dependent => :destroy没有任何影响。

您如何确保子记录在上一次 HMT 关联中被孤立后被删除?

4

2 回答 2

13

我找到的解决方案似乎是一个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
于 2009-04-19T23:33:41.717 回答
1

在连接模型上,使用“belongs_to :model,dependent: :destroy”

例如,如果您想在医生被销毁后销毁患者,并且医生通过约会拥有_many 个患者

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
于 2012-09-09T23:35:52.450 回答