2014-01-16 43 views
1

假設我有一些@stuff,並且我正在渲染一個關於每個thing的幾個屬性的表。我想每隔一行被不同顏色的,所以我使用的是典型的cycle招:有條件地向元素添加多個類

%table 
    - @stuff.each do |thing| 
    %tr{ class: cycle('even', 'odd') } 
    %td thing.bleep 
    %td thing.bloop 

但我也希望呈現不同的基礎上與每種特定thing某些情況下某些行。所以我想要某些行到foo類,如果thing.foo?爲真。如果我沒有做的事情cycle,我會做:

%tr{ class: 'foo' if thing.foo? } 

是否有方便的方式做這些事情?或者我是否真的必須手寫難看的邏輯纔能有條件地將這些東西連同在一起?它只是覺得這種乏味​​的邏輯很容易出錯,並且我應該用一個抽象來組合這兩個CSS類的變化。

回答

8

您可以use an array for class and id attributes

:class:id屬性也可以指定爲一個Ruby數組,其元素將被連接在一起。 A :class數組用「」連接,:id數組用「_」連接。

因此,在這種情況下,你可以這樣做:

%tr{:class => [cycle('even', 'odd'), ('foo' if thing.foo?)]} 

任何nil s的從數組中刪除,這樣你就不會有額外的空格結束

+1

+1非常酷,我沒有想法爲什麼我不知道這個...... – PinnyM

+0

我無法獲得if語法的工作。我得到它的工作如下:thing.foo? ? 'foo':'' –

+0

這甚至不是有效的語法... – tolgap