Напечатайте первую букву в представлении, но мне не нужно повторять букву - PullRequest
0 голосов
/ 23 мая 2019

Я делаю список категорий, но мне нужен заголовок, чтобы показать только первую букву без повторения

Это список всех категорий магазина

Контроллер:

  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 ]

4 голосов
/ 23 мая 2019

Предположим, что categories отсортировано по имени, это может быть опция.Я использую обычный Ruby, но вы можете сделать то же самое с Rails.Рассматривайте массив categories как набор записей.

categories = %W(bat bet bot cat cut dot git got gut)

grouped_categories = categories.group_by { |w| w[0] }

Группировка по первой букве ({ |w| w[0] }) с использованием Enumerable # group_by .Метод возвращает хеш, который вы можете перебрать с помощью вложенного цикла:

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
2 голосов
/ 24 мая 2019

Если вы хотите, чтобы категории были в алфавитном порядке,

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...