以下内容每个类别将获得一个帖子:
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。
答案 0 :(得分:1)
您可以使用一些sql-magic(以下功能适用于mysql,尚未在postgres中进行测试,但也应该如此):
posts = Post.group(:category_id).order('count(*)').select('count(*) as category_cnt, posts.*')
category_count = posts.first.category_cnt
答案 1 :(得分:0)
我假设您的Post
belongs_to
是Category
。
话虽这么说,rails
中有一个了不起的功能,叫做counter_cache
。查看文档here。
class Post < ApplicationRecord
belongs_to :category, dependent: :destroy, counter_cache: true
end
class Category < ApplicationRecord
has_many :posts
# category should have a column called posts_count
end
现在,无论何时创建帖子,类别的posts_count都会增加;当您删除它时,它会减少。
关于您的列表,您可以执行以下操作:
Category.order(posts_count: :desc)
和获取category.posts.first