gpt4 book ai didi

ruby-on-rails - 为什么使用连接并包含 find_each 会导致不正确的迭代计数

转载 作者:行者123 更新时间:2023-12-02 08:00:08 26 4
gpt4 key购买 nike

我有这样的关系

users = User.joins(:occupation).includes(:occupation)
count = 0
users.find_each do |u|
count += 1
end
count

count 返回的数字与 users.count 不同

它返回的数字似乎总是比我预期的要少。如果我运行这段代码,我会得到正确的计数

count = 0
users.each do |u|
count += 1
end
count

这会返回正确的计数

我能够将问题与我的用户与职业关系隔离开来。但是我不确定根本问题是什么。有什么想法会导致这种情况吗?

最佳答案

您需要考虑数据库中发生的情况才能得到答案。

通过执行 users.joins(:occupation),您要求用户加入职业。这将是一个 inner join所以你只会得到有职业的用户的结果。本质上,您所要求的是所有拥有职业的用户的数量。

你可以做一个 users.left_outer_joins(:occupation) 这将做一个 outer join并将返回所有用户(如果他们有职业,则将他们加入职业)。

如果您只是想相当高效地加载用户及其相关职业,您可以使用 users.includes(:occupation) 避免在单个查询中显式地将它们连接在一起(除非您引用职业字段在查询中,但我怀疑这是一个完全不同的问题)。

请注意,如果您加入具有许多值的协会,您可能会遇到类似的 over 计数问题。在这种情况下,您会在每个连接记录的结果中获得多行(例如,拥有两个职业的用户将被计算两次)。

关于ruby-on-rails - 为什么使用连接并包含 find_each 会导致不正确的迭代计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58451874/

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