wake-up-neo.com

So zerstören Sie mehrere Objekte gleichzeitig in Rails 3

Ich habe eine Rails-Anwendung, die versucht, mehrere Objekte gleichzeitig zu löschen.

Ich habe versucht, einen Satz von IDs, getrennt durch ',' an die Rails-Zerstörungsmethode zu senden, aber es zerstört nur ein einzelnes Objekt. Ist es möglich, mehrere Objekte in Rails 3 zu löschen?.

43
Cyber

destroy_all zerstört die Datensätze, die den Bedingungen entsprechen, indem sie destroy-Methode für jeden instantiierenden Datensatz aufrufen. So werden die Callbacks des Objekts 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
90
Eugene Rourke
Model.delete([1,2,5,6]) 

oder 

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

Übergeben Sie einfach das ids-Array

6
Sachin R

Sie können auch für eine Reihe von IDs löschen. Angenommen, Sie haben 1500 Datensätze und möchten von 751 bis zuletzt löschen:

a = Model.where(id: [751..1500])
a.destroy_all
0
LordKiz

Wenn Leistung für Sie wichtig ist und/oder wenn Sie an einem großen Dataset arbeiten, sollten Sie delete_all gegenüber destroy_all bevorzugen.

Destroy_all führt eine DELETE-Abfrage nacheinander aus. Es kann also sehr langsam sein. Weitere Details zu den Unterschieden zwischen delete_all und destroy_all finden Sie auf dieser Seite .

Da die Antwort von @M Kumar mit der neuen Schienenversion veraltet ist.

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 in Zukunft anderen helfen:

Model.where(id: [1,2,5,6]).delete_all
0
devoh

Ich hatte genau das gleiche Problem, aber die Lösung hier hat in Rails 5.1.6 nicht funktioniert.

Vielleicht übergeben Sie den Parameter params[:ids] falsch.

So repariere ich es.

Vor

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

Nach dem

ids = params[:ids].split(",")
Model.where(:id => ids).destroy_all
0
蔡依玲