classe condicional dinâmica slim [fechado]


100

Só para ajudar outros desenvolvedores, pois não há dúvida semelhante no SO.

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

Respostas:


142

Veja os exemplos abaixo:

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

A mesma abordagem pode ser usada para atribuir valores dinâmicos a outros atributos.


2
Como você faria isso para várias condições?
Maxim Zubarev

Veja abaixo nos comentários de sua resposta.
Sergey Alekseev

3
Isso também pode anexar uma classe, como: div.councilor class=(councilor.retired? ? "retired" : "") gera:div.councilor.retired
Terra Ashley

20

Eu uso o array de classes e o elemento nulo se não houver necessidade de incluir a classe na lista, então o array compacto para remover os elementos nulos e, finalmente, uni todos.

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

12

Se você tem várias condições que estou fazendo agora, algo como

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

Embora eu ache que é um defeito se is_bar? retorna falso e o HTML gerado resulta em

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

(o defeito é o caractere em branco após o foo). Se alguém tivesse uma solução para isso seria incrível.


7
Tente String#rstrip, neste caso, com 2 condições: div class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip). Ou div class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' '))por várias condições.
Sergey Alekseev
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.