gpt4 book ai didi

ruby-on-rails - 具有排序和限制的 Rails Active Record 连接查询

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

我正在尝试组合一个相当复杂的 Active Record 查询,而且我对 Rails 还很陌生。

关系

以下是查询的相关模型关系:

  • 团队 可以有很多用户
  • 用户有一个team_id 列来跟踪他们所在的团队。
  • 团队有一个管理员,即用户。这是在团队的 admin_id 列中。
  • 用户有一个电子邮件地址(例如 foo@example.com)。

架构

以下是 schema.rb 的相关部分:

create_table "teams", force: :cascade do |t|
t.integer "admin_id"
end

create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.integer "team_id"
end

add_foreign_key "teams", "users", column: "admin_id"
add_foreign_key "users", "teams"

查询

给定一个域名(例如 example.com),我想找到拥有该域名电子邮件地址的管理员的团队。如果有多场比赛,我只想要用户最多的球队。这是我目前所拥有的:

team = Team.joins('INNER JOIN users ON admin_id = users.id')
.where('email LIKE ?', "%example.com")
.where(domain_sign_up: true)

问题

此查询的问题在于它将所有匹配项作为数组返回。我想按 team.users.count 对其进行排序,然后仅将第一个(用户最多的)团队作为对象而不是数组返回。这可能是 LEFT OUTER JOIN 的候选对象吗?

谢谢!

最佳答案

尝试这样的事情

team = Team.joins('INNER JOIN users ON admin_id = users.id')
.where('email LIKE ?', "%example.com")
.where(domain_sign_up: true)
.group('teams.id')
.select('teams.*, COUNT(users.id) AS team_users_count')
.order('COUNT(users.id) DESC')
.first

我将 limit(1) 更改为 first。如果参数为 1,limit 似乎没有多大意义,所以你有一个 Team,而不是一个团队的关系。

关于ruby-on-rails - 具有排序和限制的 Rails Active Record 连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47867959/

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