web-dev-qa-db-ja.com

スリムな動的条件付きクラス

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

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

以下の例を参照してください。

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

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

131
Sergey Alekseev

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

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

あなたが複数の条件を持っている場合、私は今のようなことをしています

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

Is_barの場合は傷だと感じますが? falseを返すと、生成されたHTMLは

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

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

11
Maxim Zubarev