我有一个Rails应用程序,试图一次删除多个对象。
我已经尝试过发送一组由','分开的id到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
如果性能对你来说很重要,或者你在一个大型数据集上工作,你应该选择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
您也可以删除一个范围的id。假设您有1500条记录,您想从751条到最后一条删除:
a = Model.where(id: [751..1500])
a.destroy_all