ActiveRecord 4.2包含并按计数排序

海达

我正在写我正在研究的项目的搜索。它的意思是能够搜索文章的正文并生成其作者的列表,该列表按匹配文章的数量排序,并且仅包括相关文章,而不是所有文章。

我目前有以下查询:

Author.includes(:articles).where('articles.body ilike ?', '%foo%').references(:articles)

在这种情况下,使用include可以使所有相关文章(不是所有文章)都预先加载,这正是我想要的。但是,如果要按所包含文章的数量进行订购,我不确定如何进行。

我应该注意我要在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

吉尼尔

我认为没有针对此问题的开箱即用的解决方案。您必须编写原始sql才能执行此操作,但可以将其与现有ActiveRecord查询结合使用

Author
  .includes(:articles)
  .select('authors.*, (SELECT COUNT(0) FROM articles WHERE articles.author_id = authors.id) AS article_count')
  .order('article_count DESC')

因此,这里唯一要说明的是select零件。第一部分,authors.*选择authors表下的所有字段,这是默认设置。由于我们还希望计算文章数,因此我们创建了一个子查询,并将其结果作为作者的伪列之一(我们称为article_count传递最后一部分只是order使用调用article_count

此解决方案假设您需要根据设置进行几件事调整。

  • Author按照惯例,在Rails中映射到authors表。如果它是STI(从User继承并且正在使用users表),则需要更改authorsusers
  • articles.author_id假定外键是author_id(实质上,一篇文章仅由一位作者撰写)。更改为任何外键。

因此,根据作者的文章数量,您将拥有一系列作者。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails 4 ActiveRecord的关联计数顺序

来自分类常见问题

禁用ActiveRecord for Rails 4

来自分类Dev

rails 4 ActiveRecord :: StatementInvalid

来自分类Dev

Rails 4 ActiveRecord :: AssociationTypeMismatch

来自分类Dev

Rails 4 ActiveRecord组

来自分类Dev

rails 4 ActiveRecord :: StatementInvalid

来自分类Dev

Rails 4中的ActiveRecord :: AssociationTypeMismatch

来自分类Dev

Rails 4多个ActiveRecord关联

来自分类Dev

Rails 4茧ActiveRecord :: AssociationTypeMismatch

来自分类Dev

Rails 4 ActiveRecord多个查询

来自分类Dev

Rails 4错误:ActiveRecord :: AssociationTypeMismatch

来自分类Dev

ActiveRecord多个联接并计数

来自分类Dev

如何在rails4 / activerecord中基于父模型中的日期字段排序查询结果?

来自分类Dev

ActiveRecord Rails 4,如何查看数组属性是否包含数组中的任何值

来自分类Dev

Activerecord按字段排序

来自分类Dev

ActiveRecord,嵌套包含计数器

来自分类Dev

activerecord-postgis-adapter v2不在Rails 4中创建单独的架构

来自分类Dev

ActiveRecord导轨4不等于条件

来自分类Dev

ActiveRecord视图与表(在Rails 4中)

来自分类Dev

ActiveRecord信誉系统宝石与Rails 4

来自分类Dev

rails 4 activerecord TypeError nil不是符号

来自分类Dev

Rails 4 ActiveRecord搜索中的数据迭代

来自分类Dev

rails 4 activerecord TypeError nil不是符号

来自分类Dev

动态查询不同的值rails 4 activerecord

来自分类Dev

ActiveRecord信誉系统宝石与Rails 4

来自分类Dev

Rails 4 ActiveRecord搜索中的数据迭代

来自分类Dev

Rails 4 ActiveRecord过滤器

来自分类Dev

Rails 4 ActiveRecord :: first不起作用

来自分类Dev

使用 Rails 4 进行 ActiveRecord 查询