ruby-on-rails - Ruby 哪里有 find_each

标签 ruby-on-rails ruby activerecord

我正在查看说明如何使用“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/

相关文章:

mysql - 使用 ActiveRecord 将数据从 MS Access DB 导入 MySQL DB

ruby-on-rails - 全新安装 Rails

ruby-on-rails - 递归方法不返回调用者中的上一行位置

ruby-on-rails - Rails 4 在服务对象中包含 Helper

ruby - Easy ROT13 Ruby "programme"之谜

ruby-on-rails - 如何在 Rails 4.2 应用程序中按订阅计划类型设置 ActiveRecord 限制?

ruby-on-rails - ruby ,野科切 : sort nodeset by attribute value

ruby - 在 Ruby 的类范围内声明 "instance"变量有什么缺点?

ruby - 使用 Ruby Curb 进行基本身份验证发帖

mysql - Rails 事件记录没有 X 作为 Y 字段