我一直在寻找以更干净的方式完成以下任务。
我有一个字符串哈希,我从我的控制器调用:
@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)
答案 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 %>