在字母表的字母内显示按字母顺序排序的AR对象数组

时间:2012-08-22 16:31:48

标签: ruby-on-rails ruby ruby-on-rails-3

我有一系列AR对象,我可以按字母顺序排序,我需要按字母分割,例如{:a => [apple],:b => [banana]}等等,基于我用于排序的属性。 最终结果应该是

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

等等。 我不知道怎么做... 该数组已使用DB按字母顺序排序。

有人能帮助我吗?   NGW

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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>