我有一个 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]])
只需传递 ids 数组
如果性能对您很重要和/或如果您处理大型数据集,您应该更喜欢 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
我遇到了完全相同的问题,但是这里的解决方案在 rails 5.1.6 中对我不起作用。
也许您以错误的方式传递参数params[:ids]
。
以下是我修复它的方法。
Model.where(:id => params[:ids]).destroy_all
ids = params[:ids].split(",")
Model.where(:id => ids).destroy_all