打印视图中的第一个字母,但我不需要重复该字母

时间:2019-05-23 18:51:17

标签: ruby ruby-on-rails-5

我正在列出类别,但是我需要标题仅显示第一个字母而不重复

这是商店的所有类别的列表

控制器:

  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>

如果您能帮助我,我将非常感谢。

2 个答案:

答案 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