2012-05-07 5 views
1

나는보다 깨끗한 방식으로 다음을 수행하기 위해 헛되지 않았습니다.다수의 정렬되지 않은 목록으로 해시 분할하기

은 내가 내 컨트롤러에서 전화하고 문자열의 해시 있습니다

@categories = Category.find 

와 나는 3 개 별도의 정렬되지 않은 목록 (UL)의 결과를 표시하려합니다.

다음 내가 달성하기 위해 노력하고 무엇 못생긴 버전 :

<div class="span-7"> 
    <ul> 
    <% @categories.first(4).each do |category| %> 

     <li><%= category.name %></li> 

    <% end %> 
    </ul>  
</div> 

<div class="span-7"> 
    <ul> 
    <% @categories[5..8].each do |category| %> 

     <li><%= category.name %></li> 

    <% end %> 
    </ul>  
</div> 

<div class="span-8 last"> 
    <ul> 
    <% @categories[9..12].each do |category| %> 

     <li><%= category.name %></li> 

    <% end %> 
    </ul>  
</div> 

(참고 : 나는 BlueprintCSS, "범위-X"의 따라서 과잉 사용하고 있습니다)

내가이 생각을 그룹화 (http://rails.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Array/Grouping.html)를 사용하여 이것을 수행하는 더 깨끗한 방법이지만,이 모든 것을 어떻게 묶을 지 알 수는 없습니다.

누군가가 올바른 방향으로 나를 가리킬 수 있다면 정말 고맙겠습니다. 고맙습니다.

(레일즈 3.0.11을 사용 중입니다.)

답변

1

당신은 올바른 길을 가고 있습니다. 이것은 당신이 원하는 것을해야합니다.

<% category_count = 0 %> 
<% @categories.in_groups_of(4) do |group| %> 
    <% category_count += group.size %> 
    <div class="<%= category_count == @categories.size ? "span-8 last" : "span-7" %>"> 
    <ul> 
    <% group.each do |category| %> 
     <% if category %> 
     <li><%= category.name %></li> 
     <% end %> 
    <% end %> 
    </ul>  
    </div> 
<% end %> 
+0

"마지막"클래스를 최종 div에 추가하는 방법을 알아 내려면 몇 가지 속임수를 사용해야 할 수도 있습니다. – lyricsboy

+0

우리가 간다. 반복 할 때 범주를 세면됩니다. – lyricsboy

+0

그게 더 가까워졌지만 오류가 생겼어. '정의되지 않은 메서드'name 'for nil : NilClass' name이'category.name'을 참조하는 곳 –

관련 문제