将哈希分成多个无序列表

时间:2012-05-07 15:46:13

标签: ruby-on-rails-3 views html-lists grouping blueprint-css

我一直在寻找以更干净的方式完成以下任务。

我有一个字符串哈希,我从我的控制器调用:

@categories = Category.find

我试图在三个单独的无序列表(ul)中显示结果。

以下是我想要完成的丑陋版本:

<div class="span-7">
    <ul>
    <% @categories.first(4).each do |category| %>

        <li><%= category.name %></li>

    <% end %>
    </ul>       
</div>

<div class="span-7">
    <ul>
    <% @categories[5..8].each do |category| %>

        <li><%= category.name %></li>

    <% end %>
    </ul>       
</div>

<div class="span-8 last">
    <ul>
    <% @categories[9..12].each do |category| %>

        <li><%= category.name %></li>

    <% end %>
    </ul>       
</div>

(注意:我使用的是BlueprintCSS,因此超出了“span-x”)

我认为有一种更简洁的方法可以使用分组(http://rails.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Array/Grouping.html)但我无法弄清楚如何将所有这一起。

如果有人能指出我正确的方向,我真的很感激。谢谢。

(我正在使用Rails 3.0.11)

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。这应该做你想要的。

<% category_count = 0 %>
<% @categories.in_groups_of(4) do |group| %>
  <% category_count += group.size %>
  <div class="<%= category_count == @categories.size ? "span-8 last" : "span-7" %>">
    <ul>
    <% group.each do |category| %>
      <% if category %>
      <li><%= category.name %></li>
      <% end %>
    <% end %>
    </ul>       
  </div>
<% end %>