我正在列出类别,但是我需要标题仅显示第一个字母而不重复
这是商店的所有类别的列表
控制器:
def show
@category = Category.friendly.find(params[:id])
@category_articles = @category.articles.paginate(page: params[:page], per_page: 12)
end
视图:
<div class="container" id="tag-container">
<% @categories.each do |category| %>
<section>
<h2><%= category.name.first %></h2>
<%= link_to "#{category.name}", category_path(category)%>
<span>(<%= pluralize(category.articles.count,"")%>)</span>
</section>
<% end %>
</div>
如果您能帮助我,我将非常感谢。
答案 0 :(得分:4)
假设categories
要按名称排序,这可以是一个选项。我使用的是普通的Ruby,但是您可以对Rails进行相同的操作。将categories
数组视为记录的集合。
categories = %W(bat bet bot cat cut dot git got gut)
grouped_categories = categories.group_by { |w| w[0] }
使用Enumerable#group_by按首字母({ |w| w[0] }
)分组。该方法返回一个Hash,您可以使用嵌套循环对其进行迭代:
grouped_categories
#=> {"b"=>["bat", "bet", "bot"], "c"=>["cat", "cut"], "d"=>["dot"], "g"=>["git", "got", "gut"]}
grouped_categories.each do |initial, vals|
puts "-#{initial}"
vals.each do |val|
puts "----#{val}"
end
end
它打印:
-b
----bat
----bet
----bot
-c
----cat
----cut
-d
----dot
-g
----git
----got
----gut
答案 1 :(得分:2)
如果您希望类别按字母顺序排列,
categories = ["gut", "git", "bot", "cut", "got", "cat", "dot", "bet", "bat"]
categories.sort.chunk { |w| w[0] }.each { |ltr,a| puts "#{ltr}: #{a.join(' ')}" }
b: bat bet bot
c: cat cut
d: dot
g: git got gut