Ich suche nach dem besten Ansatz, um Datensätze aus einer Tabelle zu löschen. Zum Beispiel habe ich einen Benutzer, dessen Benutzer-ID sich über viele Tabellen erstreckt. Ich möchte diesen Benutzer und jeden Datensatz löschen, der seine ID in allen Tabellen hat.
u = User.find_by_name('JohnBoy')
u.usage_indexes.destroy_all
u.sources.destroy_all
u.user_stats.destroy_all
u.delete
Dies funktioniert und entfernt alle Referenzen des Benutzers aus allen Tabellen, aber ich habe gehört, dass dies destroy_all
sehr prozesslastig war, also habe ich es versucht delete_all
. Es entfernt nur den Benutzer aus seiner eigenen Benutzertabelle und die id
aus allen anderen Tabellen werden auf null gesetzt, die darin enthaltenen Datensätze bleiben jedoch erhalten. Kann jemand mitteilen, was der richtige Prozess für die Ausführung einer solchen Aufgabe ist?
Ich sehe, dass destroy_all
die destroy
Funktion für alle zugeordneten Objekte aufgerufen wird, aber ich möchte nur den richtigen Ansatz bestätigen.
delete_all
und 2)destroy_all
alle Datensätze instanziiert und einzeln zerstört werden. Bei einem sehr großen Datensatz kann dies daher schmerzhaft langsam sein.