如何在组中处理大型ActiveRecord结果集

blo*_*ilk 4 ruby arrays activerecord ruby-on-rails

我想知道是否有办法获取一系列ActiveRecord结果(或任何数组,就此而言)并以25个左右的组进行处理.像这样的东西:

User.all.each(25) do |group|
    # Some code that works with this group of 25
end
Run Code Online (Sandbox Code Playgroud)

我只是想避免进行多个连续的数据库查询.谢谢!

Cha*_*tni 21

Rails 2.3具有此功能.您可以指定batch_size参数.

User.find_in_batches(:batch_size =>25) do |group|
    # Some code that works with this group of 25
end
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到一个很好的教程.请注意,Rails将为每25条记录发出查询.如果处理大量记录,这有助于保持内存不足.如果要将结果拆分为多个数组,则可以in_groups_of按照Matt的建议使用.