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

时间:2009-12-31 03:23:46

标签: ruby-on-rails ruby arrays activerecord

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

User.all.each(25) do |group|
    # Some code that works with this group of 25
end

我只是想避免做多个连续的数据库查询。谢谢!

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:-2)