Frage

Mit einem normalen has_many, Es gibt die Möglichkeit von :dependent => :destroy Löschen der Assoziationen, wenn der übergeordnete Datensatz gelöscht wird. Mit has_many :through, Es könnte andere Eltern geben, die mit den Kinderunterlagen verbunden sind, also :dependent => :destroy hat keine Wirkung.

Wie stellen Sie sicher, dass Kinderunterlagen gelöscht werden, nachdem sie aus der letzten HMT -Vereinigung verwaist sind?

War es hilfreich?

Lösung

Die Lösung, die ich gefunden habe, scheint eine zu sein after_destroy Rückruf wie folgt:

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

Andere Tipps

Verwenden Sie auf dem Join -Modell "HINWEISE_TO: Modell, abhängig :: zerstören".

Zum Beispiel, wenn Sie einen Patienten zerstören möchten, sobald sein Arzt zerstört ist, und Doktor hat die Patienten durch Termine

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top