Уничтожить ассоциации после удаления последней записи has_many :through.
-
12-09-2019 - |
Вопрос
С регулярным 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::разрушать"
например, если вы хотите уничтожить пациента после того, как его врач уничтожен, а у врача много пациентов на приемах
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
Не связан с StackOverflow