如何在Rails 3中同时销毁多个对象



我有一个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

相关内容

  • 没有找到相关文章

最新更新