如何选择1000个对象的单个组?

时间:2011-07-23 05:42:52

标签: ruby-on-rails arrays object

起初我试图这样做:

 Photo.find(:all, :conditions => ["id < 2000 AND id > 999"])

但后来我意识到这不一定是1000个对象。如何精确选择一千个对象。这样我就可以运行一次可以处理1,000个对象的进程。比如这个..

Photo.find(:all, :conditions => ["id < 2000 AND id > 999"]).each{|instance| instance.photo.reprocess!(:tiny_thumb) }

2 个答案:

答案 0 :(得分:3)

您想要使用:limit:offset

# First chunk
Photo.find(:all, :order => :id, :limit => 1000)

# Second chunk
Photo.find(:all, :order => :id, :limit => 1000, :offset => 1000)

您需要包含:order以确保一致的结果,否则这些条目不一定会以破坏您的分块的相同顺序出现。

答案 1 :(得分:1)

使用find_in_batcheshttp://apidock.com/rails/ActiveRecord/Batches/find_in_batches

:batch_size为1000,这也是默认值。