Подтвердить что ты не робот

Как уничтожить несколько объектов за раз в Rails 3

У меня есть приложение Rails, которое пытается удалить сразу несколько объектов.

Я пробовал как отправить набор идентификаторов, разделенных ',', на метод rails destroy, но он уничтожает только один объект. Можно ли удалить несколько объектов в рельсах 3.

4b9b3361

Ответ 1

destroy_all уничтожает записи, соответствующие условиям, вызывая метод destroy для каждой экземплярной записи. Таким образом, выполняются обратные вызовы объектов.

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

Ответ 2

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

или

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

Просто передайте массив идентификаторов

Ответ 3

Если производительность важна для вас и/или если вы работаете с большим набором данных, вы должны предпочесть delete_all над destroy_all.

Destroy_all будет выполнять запрос DELETE по одному за раз. Так что это может быть очень медленно. Более подробную информацию о различиях между delete_all и destroy_all можно найти на этой странице.

Поскольку ответ @M Kumar будет устаревшим с новой версией рельса.

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.

Эта команда может помочь другим в будущем:

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