Уничтожить ассоциации после удаления последней записи has_many :through.

StackOverflow https://stackoverflow.com/questions/766339

Вопрос

С регулярным 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top