Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails 3删除数组的所有元素_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 Rails 3删除数组的所有元素

Ruby on rails 3 Rails 3删除数组的所有元素,ruby-on-rails-3,Ruby On Rails 3,我试图删除一组用户,但我的方式是一个接一个地删除。有更好的方法吗 我的代码是: @users ||= User.where("clicks_given - clicks_received < ?", -5).to_a @users.each do |user| user.destroy end @users | |=User.where(“点击给定-点击接收”

我试图删除一组用户,但我的方式是一个接一个地删除。有更好的方法吗

我的代码是:

@users ||= User.where("clicks_given - clicks_received < ?", -5).to_a
@users.each do |user|
  user.destroy
end
@users | |=User.where(“点击给定-点击接收”<?”,-5)。到
@用户。每个do |用户|
用户破坏
结束

您可以使用
销毁所有
方法:

User.destroy_all("clicks_given - clicks_received < ?", -5)

它基本上与您的每个调用做相同的事情,但是您可以避免使用锅炉板代码。

您可以使用Rails的内置方法。请注意,在使用这些方法时,需要将查询包装在数组中(如果要插入变量)

要迭代调用destroy(将运行回调等)的每个函数,请执行以下操作:

User.destroy\u all([“点击次数给定-点击次数接收”<?,-5])
或者只需在单个查询中删除数据库中的这些项(每个项上都没有迭代),您可以这样做,但请记住它不会运行回调:

User.delete_all(["clicks_given - clicks_received < ?", -5])
User.delete\u all([“点击次数给定-点击次数接收”<?,-5])

@dmarkow,我只是用destroy\u all更新了我的答案,而不是试图复制你的答案。我已经投票给了你们两个。但是它说,
delete\u all
destroy\u all
不能接受两个参数。它正在工作。如果我没有回调,用一个查询消除它们不是更好吗?是的,没有回调、依赖项等,速度会快得多,特别是有很多记录。否则,将为每个记录实例化ActiveRecord对象。
User.destroy_all(["clicks_given - clicks_received < ?", -5])
User.delete_all(["clicks_given - clicks_received < ?", -5])