2011-11-22 1 views
2

어떻게 다음과 같이 열에 개체의 결과를 표시 할 수 있습니다 Rails 3을 사용하여 데이터를 열로 나누는 방법은 무엇입니까?

<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으로 돌아왔다. 프로그래밍 방식으로 가장 좋은 방법은 무엇입니까?

답변

8

each_slice 방법은이 방법으로 처리 할 수, HAML 당신에게

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

을 도울 수

- 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 
+0

+1 나를 소개합니다. 나는 그것이 존재했는지 전혀 몰랐다! – sosborn

+0

그게 참 좋네요! 그러나 리턴 된 엘리먼트의 수가 9가 아닌 경우에는 어떨까요? (3에서 잘 나눠지지 않습니다). 첫 번째 열에 여분의 1을 넣는 방법은 무엇입니까? – user1049097

+0

당신은 반환 된 배열을 반복하는 또 다른 블록을 가져야하고이 경우에는 ul/li 요소 인'x'를 작성해야합니다. – cmwright

8

레일이 할 수있는 전용 방법이 그 in_groups 사용 :

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

in_groups의 두 번째 인수 (이 ca에서 false입니다. se)는 @ categories.size가 3의 배수가 아닌 경우이 코드가 빈 목록 항목을 생성하지 않음을 의미합니다.

+0

정말 유용합니다. 감사합니다. – cmwright

관련 문제