按字母顺序排序并按组显示

spy*_*g63 4 ruby ruby-on-rails ruby-on-rails-3

我正在尝试按字母顺序和块中显​​示数据库中的标题列表.

我想输出这封信,然后包括以该字母开头的所有标题.例如:

  • 一个
    • 苹果
    • 另一件事
    • 短发

我知道我可以使用.order('title')订购我的结果,但我不确定编写显示代码的最佳方法是什么?

MrT*_*rus 8

titles.group_by {|word| word[0].upcase }
Run Code Online (Sandbox Code Playgroud)

那么,如果:

titles = ['Apple', 'anothersomething', 'Bob']
Run Code Online (Sandbox Code Playgroud)

然后:

grouped_titles = titles.group_by {|word| word[0].upcase }
 => {"A"=>["Apple", "anothersomething"], "B"=>["Bob"]} 
Run Code Online (Sandbox Code Playgroud)

为了确定排序,您可以对生成的Hash进行排序,将其转换为数组:

grouped_titles = grouped_titles.sort_by{|k, v| k}
 => [["A", ["Apple", "anothersomething"]], ["B", ["Bob"]]] 
Run Code Online (Sandbox Code Playgroud)

然后,您可以迭代生成的数组.

<% grouped_titles.each do |initial_letter, titles| %>
 -display stuff here-
<% end %>
Run Code Online (Sandbox Code Playgroud)

请注意,这是在Ruby中进行分组,而不是在数据库中进行分组(可以通过.group在关系上使用方法来完成),但如果您已经在页面中显示了所有数据,则此方法应该没问题.