Order Alphabetically and Display By Group
ruby, ruby-on-rails, ruby-on-rails-3
Solution
titles.group_by {|word| word[0].upcase }
So, then if:
titles = ['Apple', 'anothersomething', 'Bob']
Then:
grouped_titles = titles.group_by {|word| word[0].upcase }
=> {"A"=>["Apple", "anothersomething"], "B"=>["Bob"]}
In order to be certain about the ordering, you can sort the resulting Hash, which converts it into an array:
grouped_titles = grouped_titles.sort_by{|k, v| k}
=> [["A", ["Apple", "anothersomething"]], ["B", ["Bob"]]]
Then you can iterate over the resulting array.
<% grouped_titles.each do |initial_letter, titles| %>
-display stuff here-
<% end %>
Note that this is grouping in Ruby, rather than in the database (which would be done by using a `.group` method on the relation), but if you were already displaying all the data in the page, this method should be fine.
Problem
I'm trying to display a list of titles from my database in alphabetical order and also in blocks. I want to output the letter and then include all titles that start with that letter. For example: - A - Apple - anotherthing - B - Bob I know that I can order my results using .order('title'), but I'm not sure what the best way to write the display code is?