2012-08-22 75 views
0

我有一個AR對象數組,我可以按字母順序排序,我需要按字母進行拆分,例如{:a => [apple ],:b => [香蕉]}等等,基於我用於排序的屬性。 最終的結果應該是這樣的在字母表中顯示按字母順序排列的AR對象數組

<ul> 
    <li>A</li> 
    <ul> 
    <li> Apple </li> 
    </ul> 
    <li>B</li> 
    <ul> 
    <li> Banana </li> 

等。 我不知道如何做到這一點...... 該數組已經按字母順序使用數據庫進行了排序。

有人可以幫助我嗎? NGW

回答

2
objects.group_by { |obj| obj.name[0].to_sym } 
0

你可以把它變成幫手:

def my_objects_in_groups_by_first_letters(objects, name_method, &block) 
    first_letters = objects.map {|o| o.send(name_method)[0, 1].upcase}.uniq 
    first_letters.each do |c| 
    yield c, objects.select {|o| o.send(name_method)[0, 1].upcase == c} 
    end 
end 

,並使用鑑於此方法:

<ul> 
    <% my_objects_in_groups_by_first_letters(@objects, :name) do |letter, objects| -%> 
    <li> 
     <%= letter %> 
     <ul> 
     <% objects.each do |o| -%> 
      <li><%= o.name %></li> 
     <% end -%> 
     </ul> 
    </li> 
    <% end -%> 
</ul>