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

use*_*097 2 ruby ruby-on-rails 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>
    <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>
Run Code Online (Sandbox Code Playgroud)

无论返回的结果如何,@categories = Category.all我都希望将它们分成三列.以编程方式执行此操作的最佳方法是什么?

evf*_*qcg 8

each_slice方法可以帮到你

%w(a s d f g h).each_slice(3) {|x| p x}
["a", "s", "d"]
["f", "g", "h"]
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)


Dam*_*ien 8

Rails有一个专门的方法来使用in_groups:

<% @categories.in_groups(3, false) do |group| %>
<ul>
  <% group.each do |category| %>
  <li><%= category.name %></li>
  <% end %>
</ul>
<% end %>
Run Code Online (Sandbox Code Playgroud)

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