Rails中的数据迭代器?

Cha*_*son 1 iterator ruby-on-rails

当我做

users = User.find(:all)
Run Code Online (Sandbox Code Playgroud)

在Rails中,根据我的理解,它从我的数据库中提取所有用户.

如果你有成千上万的用户记录,这似乎很容易吃掉服务器的内存.这是真的?如果是真的,有没有办法迭代表中的数据而不杀死你的服务器?

tom*_*sop 5

从rails 2.3开始,您可以使用find_each和find_in_batches:

User.find_each { |user| user.some_method }
Run Code Online (Sandbox Code Playgroud)

将加载默认的1000个用户.您还可以使用:batch_size选项更改默认大小.

批量查找是类似的,但它为块而不是单个对象提供数组:

 User.find_in_batches do |users|
  users.each { |user| user.some_method }
end
Run Code Online (Sandbox Code Playgroud)