cod*_*erz 52 ruby activerecord ruby-on-rails ruby-on-rails-3 ruby-on-rails-4
在Rails中,find_each和where用于从ActiveRecord支持的数据库中检索数据.
您可以将查询条件传递给where,例如:
c = Category.where(:name => 'Ruby', :position => 1)
Run Code Online (Sandbox Code Playgroud)
您可以将批量大小传递给find_each,例如:
Hedgehog.find_each(batch_size: 50).map{ |p| p.to_json }
Run Code Online (Sandbox Code Playgroud)
但是以下两个代码有什么区别?
# code 1
Person.where("age > 21").find_each(batch_size: 50) do |person|
# processing
end
# code 2
Person.where("age > 21").each do |person|
# processing
end
Run Code Online (Sandbox Code Playgroud)
代码1批次每次检索50个元组,代码2一次检索所有元组吗?欢迎更多细节解释.
我的意见是:
where和find_each可用于批量检索,但是用户可使用时限定批量大小find_each.find_each 不支持传递查询条件.如果我的理解是错误的,请纠正我.
jph*_*er2 75
活动记录关系不会自动将所有记录加载到内存中.
当你打电话时#each,所有记录都将被加载到内存中.当您调用时#find_each,记录将以给定批量大小的批量加载到内存中.
因此,当您的查询返回一些记录,这些记录对于服务器的可用资源而言将是太多内存,那么使用#find_each将是一个很好的选择.
这基本上就像使用Ruby的懒惰枚举#to_enum#lazy用#each_slice,然后#each(很方便).
| 归档时间: |
|
| 查看次数: |
23929 次 |
| 最近记录: |