スリムな動的条件付きクラス[終了]


100

SOには同様の質問がないので、他の開発者を助けるためだけに。

div class=(is_active? ? 'active' : 'inactive')
div class=('active' if is_active?)

回答:


142

以下の例をご覧ください。

div class=(is_active? ? 'active' : 'inactive')
div class=('active' if is_active?)

同じアプローチを使用して、動的な値を他の属性に割り当てることができます。


2
複数の条件でそれをどのように行いますか?
Maxim Zubarev、2014年

回答へのコメントで以下を参照してください。
Sergey Alekseev 2014年

3
これはまたなど、クラスを追加することができる div.councilor class=(councilor.retired? ? "retired" : "") :生成div.councilor.retired
テラアシュリー

20

リストにクラスを含める必要がない場合は、クラスの配列とnil要素を使用します。次に、配列を圧縮してnil要素を削除し、最後にすべてを結合します。

div class=(["cday", "col-md-1", day.day == 1 ? "col-md-offset-#{day.cwday-1}" : nil].compact.join(' '))

12

複数の条件がある場合、私は今のようなものをしています

div class=(('foo ' if is_foo?) + ('bar' if is_bar?))

is_barなら傷だと思いますが?falseを返し、生成されたHTMLの結果は

<div class="foo "></div>

(傷は、の後の空白文字fooです)。誰かがそのための解決策を持っているなら、素晴らしいでしょう。


7
String#rstripこの場合、2つの条件で 試してくださいdiv class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip)。またはdiv class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' '))いくつかの条件について。
Sergey Alekseev 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.