计算group_by子句中的记录数

Ric*_*wis 1 ruby group-by ruby-on-rails count

我将以下类别组合在一起

@categories = Category.all.group_by { |c| c.name }
Run Code Online (Sandbox Code Playgroud)

在我看来,我正在显示类别名称

<% @categories.each do |c, v| %>
  <li><%= link_to c, blog_path(:name => c) %></li>
<% end %>
Run Code Online (Sandbox Code Playgroud)

以此为例

Ruby
Ruby On Rails
CSS
Run Code Online (Sandbox Code Playgroud)

我想要实现的是每个类别名称旁边都有具有该类别名称的帖子总数,所以

Ruby(2)
Ruby On Rails(10)
Run Code Online (Sandbox Code Playgroud)

所以我试过了

@categories = Category.joins(:posts).all.group_by { |c| c.name }
Run Code Online (Sandbox Code Playgroud)

这导致只显示带有帖子对象的类别(以前所有类别都会显示,无论他们是否有帖子对象),在我的视图中我尝试过

<% @categories.each do |c, v| %>
  <li><%= link_to c, blog_path(:name => c) %><%= c.count %></li>
<% end %>
Run Code Online (Sandbox Code Playgroud)

什么都没输出.在我混淆此事之前,我想我会问如何处理这个问题,如果有人能够解释答案,那将会非常感激

非常感谢

Max*_*ams 5

调用分组类别@categories令人困惑,因为这使得它听起来像是Category对象的集合,当它实际上是一个哈希时.使用描述性名称(包括在循环中)可以使代码更清晰.

试试这个:

@category_groups = Category.includes(:posts).all.group_by { |c| c.name }
Run Code Online (Sandbox Code Playgroud)

和观点

<% @category_groups.each do |name, categories| %>
  <li><%= link_to name, blog_path(:name => name) %> (<%= categories.map{|category| category.posts.size}.sum %> posts)</li>
<% end %>
Run Code Online (Sandbox Code Playgroud)