0

我有一个 AR 对象数组,我已经能够按字母顺序排序,我需要按字母拆分,例如 { :a => [apple], :b => [banana] } 等等,基于我用于排序的属性。最终结果应该类似于

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

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

有人能帮我吗?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 回答