【发布时间】:2016-02-16 07:43:30
【问题描述】:
我正在搜索我正在从事的项目。它旨在能够搜索文章正文并生成作者列表,按匹配文章的数量排序,并且仅包括相关文章,而不是所有文章。
我目前有以下查询:
Author.includes(:articles).where('articles.body ilike ?', '%foo%').references(:articles)
在这种情况下使用包含使得所有相关文章(不是所有文章)都被预加载,这正是我想要的。但是,当涉及到按收录文章数量排序时,我不知道如何进行。
我应该注意我想在 ActiveRecord 中执行此操作,因为分页将在查询之后应用。不是在 Ruby 解决方案之后。
我应该注意我使用的是 PostgreSQL 9.3。
编辑:使用原始 SQL
这似乎像这样单独工作:
Author.includes(:articles).where('articles.body ilike ?', '%foo%').references(:articles).select('authors.*, (SELECT COUNT(0) FROM articles WHERE articles.author_id = authors.id) AS article_count').order('article_count DESC')
这很好用。但是,如果我添加 .limit(1) 它会中断。
PG::UndefinedColumn: ERROR: column "article_count" does not exist
知道为什么添加限制会破坏它吗?查询似乎也很不一样
SELECT DISTINCT "authors"."id", article_count AS alias_0 FROM "authors" LEFT OUTER JOIN "articles" ON "articles"."author_id" = "authors"."id" WHERE (articles.body ilike '%microsoft%') ORDER BY article_count DESC LIMIT 1
【问题讨论】:
标签: ruby-on-rails ruby postgresql activerecord