循环遍历数据库里的记录集合非常低效,因为那样会一次性实例化所有的对象。
使用 find_each 可以批处理数据库里的这些记录,节省内存,默认批量处理1000个。
使用方法:find_each(start: nil, finish: nil, batch_size: 1000, error_on_ignore: nil, order: :asc, &block)
Person.find_each do |person|
person.do_awesome_stuff
end
Person.where("age > 21").find_each do |person|
person.party_all_night!
end
Person.find_each.with_index do |person, index|
person.award_trophy(index + 1)
end