Ruby on rails 如何使用Rails 3将数据划分为列?

Ruby on rails 如何使用Rails 3将数据划分为列?,ruby-on-rails,ruby,ruby-on-rails-3.1,Ruby On Rails,Ruby,Ruby On Rails 3.1,如何将对象的结果显示为以下列: <ul> <li><a href="#">Category name</a></li> <li><a href="#">Category name</a></li> <li><a href="#">Category name</a></li> </ul> <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>
<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的结果是什么。全部
我想将它们分成如下三列以编程方式执行此操作的最佳方法是什么?

方法可以帮助您

%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

Rails有一种专门的方法来实现这一点,它使用:



in_groups的第二个参数(在本例中为false)表示,如果@categories.size不是3的倍数,则此代码不会生成空列表项。

这确实不错!但是当返回的元素数不是9(并且不能很好地分成3)时,该怎么办呢。如何让第一列获得额外的1?您将需要另一个块遍历返回的数组并在其中写入ul/li元素,
x
case@cmwright,谢谢你的评论,好像我的答案不正确,所以我更新了it@user1049097,我希望现在它能解决,因为@Delba的答案是,分组(或分组)可能是更好的方法。
<% @categories.in_groups(3, false) do |group| %>
<ul>
  <% group.each do |category| %>
  <li><%= category.name %></li>
  <% end %>
</ul>
<% end %>