2013-02-11 2 views
1

I`m new to RoR. Пожалуйста, помогите мне: У меня есть две модели:Найти объекты в модели по относительным условиям

class User < ActiveRecord::Base 
    belongs_to :game 
end 

и

class Game < ActiveRecord::Base 
    has_many :users, :foreign_key => "game_id" 
end 

Игровые объекты имеют много пользователей. Мне нужно найти все игровые объекты, где users.count == 1. Пожалуйста, помогите.

ответ

0

немного долго, но это работает для меня:

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

Вы можете использовать includes() или joins() в зависимости от того, что вы хотите сделать.

+0

спасибо. это тоже полезно – mahmud

1

Ответ MrYoshiji близок, но вместо того, чтобы пытаться использовать where, вам необходимо использовать 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 
+1

спасибо. Это отлично работает! – mahmud

Смежные вопросы