-
12-09-2019 - |
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?
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