假设我有一些@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类的改动。
答案 0 :(得分:9)
你可以use an array for class
and id
attributes:
:class
和:id
属性也可以指定为Ruby数组,其元素将连接在一起。:class
数组与“”连接,:id
数组与“_”连接。
所以在这种情况下你可以这样做:
%tr{:class => [cycle('even', 'odd'), ('foo' if thing.foo?)]}
从数组中删除任何nil
,这样就不会有额外的空格