Объединение таблиц, подсчет и группа для возврата модели - PullRequest
0 голосов
/ 26 января 2012

Итак, у меня есть SQL-запрос, который я хотел бы дублировать в рельсах:

select g.* 
from gamebox_favorites f 
inner join gameboxes g on f.gamebox_id = g.id 
group by f.gamebox_id 
order by count(f.gamebox_id) desc;

Я перечитывал рельсовый сайт Active Record Query Interface, но, похоже, не могу это собрать. Мне бы хотелось, чтобы запрос вернул коллекцию записей Gamebox, отсортированных по количеству «избранных», которые есть в Gamebox. Какой самый чистый способ сделать это в рельсах?

1 Ответ

0 голосов
/ 26 января 2012

Я считаю, что это будет работать (работает с аналогично структурированной базой данных локально), хотя я не уверен, что у меня есть подходящие модели в подходящих местах для того, что вы пытаетесь сделать, поэтому вам, возможно, придется переместить кул вещи вокруг:

Gamebox.joins(:gamebox_favorites).
  group('"gamebox_favorites"."gamebox_id"').
  order('count("gamebox_favorites"."gamebox_id")')

На консоли это должно скомпилироваться в (в случае PostgreSQL на серверной части):

SELECT "gameboxes".* FROM "gamebox_favorites" 
  INNER JOIN "gamebox_favorites" 
  ON "gamebox_favorites"."gamebox_id" = "gamebox"."id" 
  GROUP BY "gamebox_favorites"."gamebox_id" 
  ORDER BY count("gamebox_favorites"."gamebox_id")

... и я предполагаю, что вы не хотите просто обернуть это в find_by_sql вызов, такой как:

Gamebox.find_by_sql("select g.* from gamebox_favorites f 
  inner join gameboxes g 
  on f.gamebox_id = g.id 
  group by f.gamebox_id 
  order by count(f.gamebox_id) desc")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...