Ben*_*rey 2 ruby activerecord ruby-on-rails inner-join left-join
我正在尝试将一个相当复杂的Active Record查询放在一起,我对Rails相当新.
以下是查询的相关模型关系:
以下是相关部分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"
Run Code Online (Sandbox Code Playgroud)
给定一个域名(例如example.com),我想找到管理员拥有该域名的电子邮件地址的团队.如果有多个匹配,我想只有拥有最多用户的团队.这是我到目前为止所拥有的:
team = Team.joins('INNER JOIN users ON admin_id = users.id')
.where('email LIKE ?', "%example.com")
.where(domain_sign_up: true)
Run Code Online (Sandbox Code Playgroud)
此查询的问题是它将所有匹配作为数组返回.我想订购它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
Run Code Online (Sandbox Code Playgroud)
我换limit(1)
了first
.limit
如果参数为1,似乎没有多大意义,所以你有一个Team
,而不是一个团队的关系.
归档时间: |
|
查看次数: |
337 次 |
最近记录: |