我有一个Rails应用程序,它正在尝试一次性删除多个对象。
我尝试了将ID集合以逗号分隔的方式发送到Rails destroy方法,但它只能销毁单个对象。 在Rails 3中是否可以删除多个对象。
我有一个Rails应用程序,它正在尝试一次性删除多个对象。
我尝试了将ID集合以逗号分隔的方式发送到Rails destroy方法,但它只能销毁单个对象。 在Rails 3中是否可以删除多个对象。
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
更新
User.where(:id => params[:ids]).destroy_all
/users?ids[]=1&ids[]=2&ids[]=3
Model.delete([1,2,5,6])
Model.delete_all(["col_name in (?)", [1,2,5,6]])
只需传递id数组
我曾经遇到过完全相同的问题,但是这里的解决方案在Rails 5.1.6中对我无效。
可能是你传递params[:ids]
参数的方式不正确。
这是我的解决方法。
Model.where(:id => params[:ids]).destroy_all
ids = params[:ids].split(",")
Model.where(:id => ids).destroy_all
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
您还可以删除一系列的ID。比如您有1500条记录,想要删除从751到最后的记录:
a = Model.where(id: [751..1500])
a.destroy_all