在 Rails 中,find_each和 where用于从 ActiveRecord 支持的数据库中检索数据。
您可以将查询条件传递给where
,例如:
c = Category.where(:name => 'Ruby', :position => 1)
并且您可以将批量大小传递给 find_each
,例如:
Hedgehog.find_each(batch_size: 50).map{ |p| p.to_json }
但是下面两段代码有什么区别呢?
# 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
代码1是不是每次批量取50个元组,代码2是一次性取完所有元组?欢迎提供更多详细信息。
我的观点是:
where
和find_each
都可以用于批量检索,但是用户可以在使用find_each
时定义批量大小。find_each
不支持传递查询条件。
如果我的理解有误,请指正。
最佳答案
事件记录关系不会自动将所有记录加载到内存中。
当您调用#each
时,所有记录都将加载到内存中。当您调用 #find_each
时,记录将按给定的批量大小分批加载到内存中。
因此,当您的查询返回大量记录时,对于服务器的可用资源来说,内存过多,那么使用 #find_each
将是一个不错的选择。
这基本上就像使用 ruby 的惰性枚举 #to_enum#lazy
和 #each_slice
然后 #each
(非常方便)。
关于ruby-on-rails - 在 Rails 中,find_each 和 where 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30010091/