现在ActiveRecord::Relation#all
在 Rails 4 中已弃用,如何迭代所有记录?
之前:
Foo.all.each do |foo|
# whatever
end
我现在可以这样近似,但感觉很脏:
Foo.where(true).each do |foo|
# whatever
end
有没有更好的办法?
根据Active Record 查询接口的 Rails 指南 http://guides.rubyonrails.org/active_record_querying.html#retrieving-multiple-objects,迭代所有记录的正确方法是使用find_each http://api.rubyonrails.org/classes/ActiveRecord/Batches.html#method-i-find_each.
Using Foo.all.each
将加载entire将表存入内存,实例化所有行;然后遍历实例。find_each
批量执行此操作,这在内存使用方面更有效。
来自指南:
The find_each
方法检索一批记录,然后产生each作为模型单独记录到块中。在下面的示例中,find_each
将检索 1000 条记录(两者的当前默认值find_each
and find_in_batches
),然后将每个记录单独生成到块作为模型。重复此过程,直到处理完所有记录:
User.find_each do |user|
NewsLetter.weekly_deliver(user)
end
参考:
- 活动记录查询接口 http://guides.rubyonrails.org/active_record_querying.html
- ActiveRecord::批次 http://api.rubyonrails.org/classes/ActiveRecord/Batches.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)