0

アルファベット順に並べ替えることができたARオブジェクトの配列があります。たとえば、{:a => [apple]、:b => [banana]}など、文字で分割する必要があります。並べ替えに使用する属性。最終結果は次のようになります

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

等々。これを行う方法がわかりません...配列はすでにDBを使用してアルファベット順にソートされています。

誰かが私を助けることができますか?ngw

4

2 に答える 2

2
objects.group_by { |obj| obj.name[0].to_sym }
于 2012-08-22T16:39:15.637 に答える
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>
于 2012-08-22T17:07:50.897 に答える