有条件地为元素添加多个类

时间:2014-01-16 22:24:36

标签: ruby-on-rails ruby haml

假设我有一些@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类的改动。

1 个答案:

答案 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,这样就不会有额外的空格