围绕find_each的范围行为

时间:2014-04-21 22:19:53

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我在表格中有很多记录,我试图使用find_each进行更改。我的问题是:如果我有一个使用find_each的范围,并且在find_each中我改变了我正在查找某些记录的值,那么这些受影响的记录是否也会在find_each中处理?例如,如果我这样做:

User.where(classification: nil).find_each do |u|
    if u.age > 21
        u.update!(classification: "accepted")
        User.where(classification: nil).where(age > 21).each do |other|
            other.update!(classification: "rejected")
        end
    end

在处理以前的用户时,我更新的其他用户记录是否仍会在find_each中处理,因为他们的作用域的值已被更改?

1 个答案:

答案 0 :(得分:0)

我不认为它会在更新后最终出现在find_each列表中。它使用主键作为排序,并且在后续循环中不会再次击中低ID。

修改

抱歉 - 我看到你现在要问的是什么。是的,它会影响它。更改所有分类以使它们不再为nil将导致外部循环在第二批中不返回任何项目。