Für ein echtes TRUNCATE
können Sie execute
verwenden, um das rohe SQL auszuführen.
In Ihren Beispielen mit Modellen wurden keine echten TRUNCATE
-Abfragen ausgeführt.
destroy_all
nicht TRUNCATE
eine Tabelle. Es "zerstört die Datensätze, die den Bedingungen entsprechen, indem jeder Datensatz instanziiert und seine Destroy-Methode aufgerufen wird" ( link ). delete_all
ist näher - es ignoriert Callbacks - aber immer noch kein TRUNCATE
. Mit der Methode execute
werden die Zeilen aus der Datenbank gelöscht, ohne dass Modellinstanzen erstellt werden.
Außerdem wird eine tatsächliche TRUNCATE
-Abfrage, zumindest in MySQL, das automatische Inkrement auf dem Primärschlüssel zurücksetzen, so dass der nächste Eintrag, den Sie einfügen, die ID 1 hat.
Ich nehme an, Ihre Join-Tabelle heißt categories_posts. CategoryPost.destroy_all sollte funktionieren, wenn nicht, müssen Sie möglicherweise den Tabellennamen im Modell (CategoryPost)
angeben %Vor%Aktualisieren, es gibt kein CategoryPost-Modell, daher sollte es erstellt werden:
%Vor%Tags und Links ruby-on-rails activerecord truncate