Предположим, что 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