我正在查看说明如何使用“find_each”方法的官方 Rails 文档。这是他们给出的例子
Person.where("age > 21").find_each do |person|
person.party_all_night!
end
这一次处理 1000 条记录。但是,我仍然很困惑。这如何转化为 SQL?允许 Ruby 一次只能处理 1000 条记录的幕后发生了什么?
我有点困惑的原因是 Person.where("age > 21") 似乎会先执行,这会返回所有结果。
例如:
Person.where("age > 21").limit(10)
会先返回内存中的所有人,然后给你前 10 个,对吧?
最佳答案
Person.where("age > 21")
仅返回 ActiveRecord 关系。它不会返回所有结果。
Person.where("age > 21").limit(10)
不会将所有模型加载到内存中,那样会很糟糕且无法使用。它只加载 10 个。
find_each
并不真正一次处理 1000 条记录。它加载 1000 条记录,然后处理每条记录。
关于ruby-on-rails - Ruby 哪里有 find_each,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15457329/