首页 > 解决方案 > Rails:按频率列出项目,包括频率

问题描述

以下每个类别将获得一个帖子:

Post.group(:category_id).order('count *')

然后,我可以通过列出每个结果来显示代表帖子的表格,每个类别一个:

CATEGORY | SAMPLE POST ID | SAMPLE POST TITLE
        1        |             123           | How to swim out loud
        2        |             246           | On Hamlet

但是,我想包括此类别中的帖子数,例如:

CATEGORY | AMOUNT | SAMPLE POST ID | SAMPLE POST TITLE
        1        |       5       |            123           | How to swim out loud
        2        |       2       |            246           | On Hamlet

我们怎样才能显示数量,即“每组计数”?希望有一种方法可以从“发布”结果中提取它作为适当的 ActiveRecord 查询的一部分。

请注意,这里没有“类别”表。category_id 只是一个独立的列。因此 counter_cache 是不可能的。

标签: mysqlruby-on-railsactiverecordruby-on-rails-5

解决方案


您可以使用一些 sql-magic(以下适用于 mysql,尚未在 postgres 中测试,但也应该):

posts = Post.group(:category_id).order('count(*)').select('count(*) as category_cnt, posts.*')
category_count = posts.first.category_cnt

推荐阅读