Die Rails 4 Dokumentation sagt in Bezug auf diese Rückrufe auf dem Modell für eine Beziehung has_many :through
beitreten zerstören:Warum ist collection = Objekte auf has_many nicht: durch Auslösen von Rückrufen auf dem Join-Modell beim Löschen der Assoziation?
collection=objects
Ersetzt die Sammlungen Inhalt durch das Löschen und Objekte entsprechend hinzufügen. Wenn die Option: through aktiviert ist, werden Callbacks in den Join-Modellen ausgelöst, mit Ausnahme von Callbacks löschen, , da das Löschen direkt erfolgt.
Zum Glück ist es zumindest dokumentiert, aber ich möchte wissen, warum in aller Welt dies der Fall ist? Hoffentlich gibt es einen technischen Grund, denn sonst ist es einfach verrückt!
In meinem Fall hatte ich eine has_and_belongs_to_many
Beziehung auf dem Join-Tabellen-Modell zu einem anderen Modell. Die Datensätze in dieser zweiten Join-Tabelle werden niemals gelöscht, wenn die zugehörigen Datensätze in der ersten Join-Tabelle gelöscht wurden. Ich griff dies auf die Hacky fühlt, und ich muss mich wiederholen Sie auf jeder Seite der :through
Beziehung:
has_many :schools_templates, dependent: :destroy
has_many :templates, through: :schools_templates, before_remove: :remove_groups_school_templates
private
def remove_groups_school_templates(template)
schools_templates.where(template: template).first.groups.clear
end
Es gibt eine Validierung ‚sicherstellen‘ Einzigartigkeit auf den Tabellen Datensätze zwischen den beiden Fremdschlüssel verbinden, so dass das, warum kann ich first
im Rückruf anrufen.
Danke für Ihre Antwort :) Ich habe die Frage aktualisiert, um zu zeigen, dass ich bereits die abhängige Zerstörung auf die Verknüpfung mit dem Join-Modell gesetzt hatte. Nicht sicher, warum ich das verpasst habe :) Ich denke, mein Argument ist, dass das Löschen nicht "direkt" sein sollte, sondern "Destroy" Callbacks auf dem Join-Modell auslösen sollte. –