我一直在寻找以更干净的方式完成以下工作,但徒劳无功。
我有一个字符串哈希,我从控制器调用它:
@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>
(注意:我使用的是蓝图CSS,因此"span-x"过多)
我认为有一种更干净的方法可以使用分组 (http://rails.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Array/Grouping.html) 来做到这一点,但我无法弄清楚如何将所有这些联系在一起。
如果有人能指出我正确的方向,我将不胜感激。谢谢。
(我正在使用 Rails 3.0.11)
你走在正确的轨道上。这应该做你想要的。
<% 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 %>