嵌套分组ActiveRecord的代码建议Rails 5.2

时间:2019-02-12 04:40:28

标签: ruby-on-rails group-by rails-activerecord

我正在做一个需要做一些基本统计报告的项目。例如,模型Post的外键字段category_id引用了Category模型中的一条记录,而布尔字段published的默认值是{{1 }}(以及falsetitlebody-但它们与此问题无关)。

我想设置和嵌套分组以遍历author模型,并按Post分组Post记录,然后在每个类别中按状态划分进一步分组Category字段,为每个分组赋予published,以呈现类似于以下内容的结果:

count

下面是我开始使用的非功能代码:

Categories
Tutorial
  Published: 14 posts
  Draft:     3 posts
Q & A
  Published: 14 posts
  Draft:     3 posts
Letter
  Published: 14 posts
  Draft:     3 posts

任何有关如何修改上述代码的反馈或建议,将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

请尝试在下面的查询中对其进行测试,但我认为它应该可以工作

未测试

categories = Category.left_outer_joins(:posts)
                                .select("
                                       Categories.label, 
                                       (SELECT COUNT(posts.id) from posts where posts.published=true) as published_count, 
                                       (SELECT COUNT(posts.id) from posts where posts.published=false) as draft_count
                                       ")
                                .group('categories.id')

在视图中

<% categories.each do |category| %>
  <%= category.label %>
  <%= category.published_count %>
  <%= category.draft_count %>
<% end %>