如何将对象的结果显示为如下列的列:
<ul>
<li><a href="#">Category name</a></li>
<li><a href="#">Category name</a></li>
<li><a href="#">Category name</a></li>
</ul>
<ul>
<li><a href="#">Category name</a></li>
<li><a href="#">Category name</a></li>
<li><a href="#">Category name</a></li>
</ul>
<ul>
<li><a href="#">Category name</a></li>
<li><a href="#">Category name</a></li>
<li><a href="#">Category name</a></li>
</ul>
无论返回@categories = Category.all
的结果如何,我都希望将它们分成三列,如下所示。 以编程方式执行此操作的最佳方式是什么?
答案 0 :(得分:8)
each_slice方法可以帮助您
%w(a s d f g h).each_slice(3) {|x| p x}
["a", "s", "d"]
["f", "g", "h"]
在HAML中,您可以通过这种方式处理它
- cats = Array.new(3, [])
= @categories.each_slice(3) do |category|
- cats = cats.zip(category).map(&:flatten)
- cats.each do |subcat|
%ul
- subcat.each do |l|
%li
%a{:href => "#"}
= l
答案 1 :(得分:8)
Rails有一种专门的方法来使用in_groups:
<% @categories.in_groups(3, false) do |group| %>
<ul>
<% group.each do |category| %>
<li><%= category.name %></li>
<% end %>
</ul>
<% end %>
in_groups的第二个参数(在本例中为false)表示如果@ categories.size不是3的倍数,则此代码不会生成空列表项。