通常の では、親レコードが削除されたときに関連付けを削除する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