2012-10-10 15 views

Antwort

58

Ich denke, es ist besser, statt löschen zu verwenden zu zerstören:

Manager.where(:manager_level => 5).destroy_all 
+5

Definitiv gültig, aber beachte: "Zerstört die Datensätze, die den Bedingungen entsprechen, indem jeder Datensatz instanziiert und seine Destroy-Methode aufgerufen wird." (http://apidock.com/rails/ActiveRecord/Relation/destroy_all) Dies könnte für große Ergebnismengen sehr langsam sein. –

+0

Ja, ich habe darüber nachgedacht, Modelle konsistent zu halten und so weiter. – MurifoX

+4

@MurifoX - Können Sie erklären, warum Sie denken, zerstören ist besser als löschen? Nicht unbedingt uneins, aber es würde helfen, Ihre Antwort vollständiger zu machen. –

12

sollte diese Arbeit:

Manager.where(:manager_level => 5).delete_all 

Hinweis: Dies wird nicht abhängig Datensätze entfernen.

23

Versuchen Sie folgendes:

Manager.delete_all(manager_level: 5) 
+0

1. Ich brauche eine Variable zu verwenden, um festzulegen, was zu löschen. 2. Die Tabelle hat keinen Index, sie ist eine Verbindungstabelle zwischen zwei anderen Tabellen. –

+0

Hat nicht für mich gearbeitet. Aufgrund der referenziellen Integrität ist ein Fehler aufgetreten. –

+0

Dies sollte die akzeptierte Antwort sein, da andere Abfragen SELECT vor dem Löschen versuchen - was zu Leistungsproblemen bei großen Datensätzen führt. – toobulkeh

Verwandte Themen