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