gpt4 book ai didi

ruby-on-rails - 在 Rails 中,find_each 和 where 之间有什么区别?

转载 作者:数据小太阳 更新时间:2023-10-29 06:21:39 25 4
gpt4 key购买 nike

在 Rails 中,find_eachwhere用于从 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是一次性取完所有元组?欢迎提供更多详细信息。

我的观点是:

  1. wherefind_each 都可以用于批量检索,但是用户可以在使用find_each 时定义批量大小。
  2. 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com