Slimでクラスを表示しない場合は、class属性を削除したいのですが。
ERBでは、次を使用できます。
<input <%= "class='foo'" if false %> />
<input />
Slimでこれを行うにはどうすればよいですか?
私はこれを見つけましたが、もっと慣用的な解決策があるに違いないと思います。
| <input "#{'class=\"foo\"' if false}" />
Slimでクラスを表示しない場合は、class属性を削除したいのですが。
ERBでは、次を使用できます。
<input <%= "class='foo'" if false %> />
<input />
Slimでこれを行うにはどうすればよいですか?
私はこれを見つけましたが、もっと慣用的な解決策があるに違いないと思います。
| <input "#{'class=\"foo\"' if false}" />
属性の値が の場合、属性nil
全体が省略されます (実際、これはnil
またはほとんどの場合に発生しますが、とでは属性の動作が異なるfalse
ように見えます)。class
false
true
input class=('foo' if condition)
これは出力されます
<input class="foo" />
condition
である場合true
、および
<input />
condition
偽の場合。
スプラット (*) 演算子を使用して、追加する属性を含むハッシュを使用して、スリムでタグの条件付き属性を定義できます。
http://www.rubydoc.info/gems/slim/frames#Splat_attributes__
splat オペレーターは、タグに追加される一連の属性にハッシュを展開します。ハッシュが空の場合、属性は追加されません。
例えば、
- admin_classes = @User.admin? ? {class: "foo"} : {}
input *admin_classes
@User.admin の場合? == true、レンダリングする必要があります
<input class="foo">
そうでなければ @User.admin? == false、レンダリングする必要があります
<input>
「クラス」などの属性や、属性の結合がオンになっているその他の属性については、次のようにすることもできます。
- admin_classes = @User.admin? ? {class: ["foo","bar"]} : {}
input *admin_classes class="biz"
@User.admin の場合? == true、レンダリングする必要があります
<input class="foo bar biz">
そうでなければ @User.admin? == false、レンダリングする必要があります
<input class="biz">