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)
什么都没输出.在我混淆此事之前,我想我会问如何处理这个问题,如果有人能够解释答案,那将会非常感激
非常感谢
调用分组类别@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)
| 归档时间: |
|
| 查看次数: |
645 次 |
| 最近记录: |