【发布时间】:2016-03-27 18:40:37
【问题描述】:
我正在寻找一种在 Rails 中生成以下 SQL 的方法(使其成为范围),以便我可以将其与进一步的 scopes 链接起来(例如 Article.published.most_comments):
SELECT *, cs.count
FROM articles, (
SELECT article_id, count(*)
FROM comments
GROUP BY comments.article_id
) cs
WHERE articles.id = cs.article_id
ORDER BY cs.count DESC;
我已经尝试过类似Article.joins(:comments).select('*').group('comments.article_id') 的方法,但没有生成所需的 SQL:
SELECT * FROM "articles"
INNER JOIN "comments" ON "comments"."article_id" = "articles"."id"
GROUP BY comments.article_id
(PSQL): PG::GroupingError: ERROR: column "articles.id"
must appear in the GROUP BY clause or be used in
an aggregate function
而且似乎没有 .from 方法可以在其中指定嵌套的 SQL SELECT。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 rails-activerecord