起初我试图这样做:
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) }
答案 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_batches
:http://apidock.com/rails/ActiveRecord/Batches/find_in_batches
,:batch_size
为1000,这也是默认值。