使用 find_each 来迭代一系列 ActiveRecord 对象。用循环来处理数据库中的记录集(如 all 方法)是非常低效率的,因为循环试图一次性得到所有对象。而批处理find_each方法允许一批批地处理记录,默认为1000条数据,因此需要占用的内存大幅减少。
# 差的编码习惯
Person.all.each do |person|
person.do_awesome_stuff
end
Person.where('age > 21').each do |person|
person.party_all_night!
end
# 好的编码习惯
Person.find_each do |person|
person.do_awesome_stuff
end
Person.where('age > 21').find_each do |person|
person.party_all_night!
end