2013-01-21 10 views
38

Ich habe eine Rails-Anwendung, die versucht, mehrere Objekte gleichzeitig zu löschen.So zerstören Sie mehrere Objekte gleichzeitig in Rails 3

Ich habe versucht zu senden Satz von ID getrennt durch ',' zu Schienen zerstören Methode, aber es nur einzelne Objekt zu zerstören. Ist es möglich, mehrere Objekte in Schienen 3.

+1

Die Antwort richtig, aber nur für Wissen gehen durch die Differenz von DELETE_ALL und destroy_all hat, ist. Dies würde Ihnen helfen: http://stackoverflow.com/questions/6698207/delete-all-vs-destroy-all –

Antwort

77

destroy_all zerstört die passende Datensätze Bedingungen zu löschen, indem Methode zerstören Aufruf für jeden instanziierenden Datensatz. So werden Callbacks von Objekten ausgeführt.

Model.destroy_all(:status => "inactive") 
Model.where(:id => [1,2,3,4,5]).destroy_all 
Model.where(:id => 1..5).destroy_all 

UPDATE

User.where(:id => params[:ids]).destroy_all 

/users?ids[]=1&ids[]=2&ids[]=3 
+0

wie Array ID übergeben, versuchte ich wie http: // localhost: 3000/users/id = [1, 2,3,4] .... Nehmen Schienen diese Routen an ... – Cyber

+0

bearbeitet. check it out –

+0

Ich bekomme einen Routingfehler, wenn versucht ... – Cyber

5
Model.delete([1,2,5,6]) 

oder

Model.delete_all(["col_name in (?)", [1,2,5,6]]) 

einfach passieren die ids Array

+13

Löschen ist nicht das Gleiche wie zerstören. –

+0

Wie übergeben Array von IDs ... Ich bekomme einen Routing-Fehler, wenn ich versuchte, wie oben ... – Cyber

0

Wenn die Leistung für Sie wichtig ist und/oder wenn Sie arbeiten auf einem großen Datensatz, den Sie DELETE_ALL über destroy_all bevorzugen sollte.

Destroy_all wird eine DELETE-Abfrage nacheinander ausführen. Es kann also sehr langsam sein. Weitere Details zu den Unterschieden zwischen delete_all und destroy_all finden Sie unter on this page.

Da die @M Kumar's Antwort wird mit der neuen Schiene Version veraltet sein.

Model.delete_all(["col_name in (?)", [1,2,5,6]]) 
DEPRECATION WARNING: Passing conditions to delete_all is deprecated and will be removed in Rails 5.1. 

Dieser Befehl könnte anderes in der Zukunft helfen:

Model.where(id: [1,2,5,6]).delete_all 
Verwandte Themen