2008-11-04 6 views
7

레일 부분을 렌더링 중이고 부분을 렌더링 할 때 배경색을 번갈아 사용하고 싶습니다. 나는 그렇게 여기에 슈퍼 분명하지 않다 내가 원하는 무엇의 예입니다 알고레일 부분 집합의 조건부 서식

행 한 회색 배경 행 두 개의 노란색 배경 행 세 회색 배경 행 4 개의 노란색 배경
  • 배경색이 표시되지 않도록 stackoverflow 이음새가 있지만 내 생각을 분명히합니다.

이내가 문제는 내가 배경을 변경하는 방법을 몰라이

<tr bgcolor="#AAAAAA"> 
    <td><%= row.name %></td> 
</tr> 

처럼

<table> 
    <%= render :partial => 'row' :collection => @rows %> 
</table> 

_row.html.erb 부분 모양을 사용하고보기 코드 다른 모든 행에 대해 색상. 이것을 할 수있는 방법이 있습니까?

답변

18

Cycle 도우미를 사용할 수 있습니다. 이런 식으로 뭔가 :

<tr class="<%= cycle("even", "odd") %>"> 
    <td><%= row.name %></td> 
</tr> 

또는 내가 CSS 클래스를 사용하여 권 해드립니다 것이지만, 귀하의 경우에 사용 BGCOLOR 대신

.

주기 ('첫째', '둘째', '세 번째', 'and_more') 이상의 세 가지 값을 순환 할 수 있습니다.

기타 : reset_cycle ('cycle_name') 이것은 각 반복에서 순환 목록의 첫 번째 값으로 다시 시작하게합니다.

더 많은 예제는 레일 documentation을 확인하십시오.

+1

페이지에 여러 개의 목록이나 표를 사용하는 경우 사이클의 이름을 지정하는 것이 좋습니다. 그냥 : name => 'some_unique_name'을 순환 ('a', 'b', ...) 호출의 끝까지 전달하십시오. –

0

또 다른 아이디어는 (TD의 총 개수 % 2)를 기준으로 자바 스크립트를 사용하여 요소의 스타일을 변경할 수 있다는 것입니다.

그런 식으로 모든 시각적 인 것들이 html/css/javascript 레이어에 포함됩니다. 자바 스크립트가 비활성화되어 있으면 다시이 기술이 작동하지 않습니다.

0

주기가있는 "잡았다"가 하나 있습니다. 문자열에 추가해야하는 경우주기가 중단됩니다. 예 :

cycle('odd', 'even') << " some other classes" 

은주기를 중단합니다. 그러나 순서를 반대로 또는 문자열을 구성하는 것은 잘 작동 :

"some other classes " << cycle('odd', 'even') 
"#{cycle('odd', 'even')} some other classes" 

내가하지 (아직)이 그렇게 될 수 있습니다 이유를 소스에 파 놓은 광산했습니다. 또한 레일즈 3.2.x를 사용 중입니다.