Как разделить данные на столбцы с Rails 3? - PullRequest
2 голосов
/ 23 ноября 2011

Как я могу отобразить результаты объекта в столбцы, как показано ниже:

<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 Я хочу разделить их на три столбца, как это. Как лучше всего программно это сделать?

Ответы [ 2 ]

8 голосов
/ 23 ноября 2011

В 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) означает, что этот код не будет выдаватьпустые элементы списка, если @ateg.size не кратен 3.

8 голосов
/ 23 ноября 2011

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...