Ruby on rails 按相对条件查找模型中的对象

Ruby on rails 按相对条件查找模型中的对象,ruby-on-rails,Ruby On Rails,我是新来的罗。请帮助我: 我有两种型号: class User < ActiveRecord::Base belongs_to :game end class用户

我是新来的罗。请帮助我: 我有两种型号:

class User < ActiveRecord::Base
  belongs_to :game
end
class用户

类游戏“游戏id”
结束

游戏对象有很多用户。我需要找到所有游戏对象,其中users.count==1。请帮忙。

有点长,但这对我来说很有效:

 Game.joins(:users).where("(select count(users.game_id) from users users2 where users2.game_id = games.id) = 1")

您可以使用
includes()
joins()
,具体取决于您要执行的操作。

有点长,但这对我很有用:

 Game.joins(:users).where("(select count(users.game_id) from users users2 where users2.game_id = games.id) = 1")

你可以使用
includes()
joins()
,这取决于你想做什么。

Yoshiji先生的答案很接近,但你需要使用
group
having
,而不是尝试在哪里使用

例如:

Game.joins(:users).group("users.game_id").having("count(users.game_id) = 1")
这将生成以下查询:

SELECT games.* FROM "games" INNER JOIN "users" ON "users"."game_id" = "games"."id" GROUP BY users.game_id HAVING count(users.game_id) = 1

Yoshiji先生的答案很接近,但是你需要使用
拥有
,而不是尝试使用
where

例如:

Game.joins(:users).group("users.game_id").having("count(users.game_id) = 1")
这将生成以下查询:

SELECT games.* FROM "games" INNER JOIN "users" ON "users"."game_id" = "games"."id" GROUP BY users.game_id HAVING count(users.game_id) = 1