在Ruby中使用count + modulo(适用时)循环

时间:2015-04-10 00:40:43

标签: ruby-on-rails ruby

为了打破长时间的数据迁移,我使用限制为100的组的查询,然后处理这100条记录。

类似的东西......

count = Model.where("conditions").count
count = count / 100
count = count+1 if count%100 != 0
count.times do
  #do my data migration steps .limit(100)...
end

是否有一种快捷方式或更好的方法来根据是否有除以100时的余数来计算?感觉像我忘记了一个简单的方法(除了舍入似乎更慢,但也许它不是)。

2 个答案:

答案 0 :(得分:2)

是。 Rails非常支持这一点,您不必滚动自己的代码来查找批量记录。

最简单的方法是使用find_each,一次无缝加载1000条记录:

Model.find_each do |model|
  # ...
end

基础机制为find_in_batches,默认批量大小为1000.您可以直接使用find_in_batches,但您不必使用find_each就足够了:

Model.find_in_batches(batch_size: 100) do |batch|
  batch.each do |model|
    # ...
  end
end

答案 1 :(得分:1)

Rails有几种方法可以在batches中加载记录。 find_each在这里会很好用。它默认为批量1000,但您可以指定批量大小:

Model.find_each(batch_size: 100) do |record|
  ...
end