gpt4 book ai didi

ruby-on-rails - 循环遍历拥有 rails 用户的 Teams

转载 作者:太空宇宙 更新时间:2023-11-03 18:03:55 24 4
gpt4 key购买 nike

我搜索了整个网站,但找不到我要找的东西。

我正在开发一个快速的小型 Rails 示例应用程序,其中我有 Teams,其中有_many Users。每个用户都有_多条步数记录,每一步都包含步数和附截图。

我想显示步数最高的前 5 个组(一个组中所有用户的总步数)。

这只是一个爱好项目,可能它没有遵循正确的方法,但循环对我来说并不合适,所以只是想把它放在那里看看是否有更好的方法。

这就是我所做的。

    /app/controllers/concerns/application_helper.rb

module ApplicationHelper
def topfiveteams
@topfiveteamswithcount
@totalcount = 0
@all_teamshash = {}
Team.all.each do |team| ---> Loop 1
teamcount = 0
team.users.each do |user| ---> Loop 2
userstepcount = 0
user.steps.each do |step| ---> Loop 3
userstepcount += step.stepcount
end
teamcount += userstepcount
end
@all_teamshash[team.teamname] = teamcount
end

h = @all_teamshash.sort_by {|_key, value| value}.reverse.to_h
@topfiveteamswithcount = h.first(5).to_h

end
end

RoR 中是否有更简洁的方法?

最佳答案

Team.joins(users: :steps).group(:id).order('SUM(stepcount) DESC').limit(5)

如果您只需要团队 ID 和步数总和,则使用 pluck('teams.id, SUM(stepcount)')

这将根据他们的团队将所有步骤分成几组。然后按 stepcount 降序的总和对组进行排序。然后,您可以获取前 5 名结果,以获得总步数最高的 5 个团队。

我很确定 Rails 足够聪明,可以正确解析 group(:id),但是如果您收到“不明确的列名称”错误,请将其更新为 group('teams .id').

关于ruby-on-rails - 循环遍历拥有 rails 用户的 Teams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54066526/

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