classe condizionale dinamica sottile [chiusa]


100

Solo per aiutare altri sviluppatori, perché non ci sono domande simili su SO.

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

Risposte:


144

Guarda gli esempi di seguito:

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

Lo stesso approccio può essere utilizzato per assegnare valori dinamici ad altri attributi.


2
Come lo faresti per più condizioni?
Maxim Zubarev

Vedi sotto nei commenti alla tua risposta.
Sergey Alekseev

3
Questo può anche aggiungere una classe, come: div.councilor class=(councilor.retired? ? "retired" : "") genera:div.councilor.retired
Terra Ashley

20

Uso un array di classi e un elemento nil se non è necessario includere la classe nell'elenco, quindi compatto l'array per rimuovere gli elementi nil e infine unire tutti insieme.

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

12

Se hai più condizioni, sto facendo qualcosa di simile

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

Anche se sento che è un difetto se is_bar? restituisce false e il risultato HTML generato

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

(la macchia è il carattere vuoto dopo il foo). Se qualcuno avesse una soluzione per questo sarebbe fantastico.


7
Prova String#rstripin questo caso con 2 condizioni: div class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip). O div class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' '))per diverse condizioni.
Sergey Alekseev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.