我将以下类别组合在一起

@categories = Category.all.group_by { |c| c.name }

在我看来,我是这样显示类别名称的
<% @categories.each do |c, v| %>
  <li><%= link_to c, blog_path(:name => c) %></li>
<% end %>

举个例子
Ruby
Ruby On Rails
CSS

我想实现的是每个类别名称旁边都有具有该类别名称的文章总数,所以
Ruby(2)
Ruby On Rails(10)

所以我试过
@categories = Category.joins(:posts).all.group_by { |c| c.name }

这只会导致显示post对象的类别(以前所有类别都会显示,不管它们是否有post对象),在我的视图中,我尝试了
<% @categories.each do |c, v| %>
  <li><%= link_to c, blog_path(:name => c) %><%= c.count %></li>
<% end %>

它什么也不输出我想在我把事情搞糊涂之前我会问一下如何处理这个问题,如果有人能解释一下答案,我将不胜感激
非常感谢

最佳答案

将分组的categories@categories调用是令人困惑的,因为这使它听起来像一个Category对象的集合,而实际上它是一个散列使用描述性名称(包括在循环中)可以使代码更加清晰。
试试这个:

@category_groups = Category.includes(:posts).all.group_by { |c| c.name }

和风景
<% @category_groups.each do |name, categories| %>
  <li><%= link_to name, blog_path(:name => name) %> (<%= categories.map{|category| category.posts.size}.sum %> posts)</li>
<% end %>

关于ruby-on-rails - 计算group_by子句中的记录数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23935797/

10-13 05:29