classe conditionnelle dynamique slim [fermée]


100

Juste pour aider d'autres développeurs, car il n'y a pas de question similaire sur SO.

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

Réponses:


144

Voir les exemples ci-dessous:

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

La même approche peut être utilisée pour attribuer des valeurs dynamiques à d'autres attributs.


2
Comment feriez-vous cela pour plusieurs conditions?
Maxim Zubarev

Voir ci-dessous dans les commentaires à votre réponse.
Sergey Alekseev

3
Cela peut également ajouter une classe, telle que: div.councilor class=(councilor.retired? ? "retired" : "") génère:div.councilor.retired
Terra Ashley

20

J'utilise un tableau de classes et un élément nil s'il n'est pas nécessaire d'inclure une classe dans la liste, puis un tableau compact pour supprimer les éléments nil et enfin les assembler.

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

12

Si vous avez plusieurs conditions, je suis en train de faire quelque chose comme

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

Bien que je pense que c'est une tache si is_bar? renvoie false et le HTML généré entraîne

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

(le défaut est le caractère vide après le foo). Si quelqu'un avait une solution pour cela, ce serait génial.


7
Essayez String#rstripdans ce cas avec 2 conditions: div class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip). Ou div class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' '))pour plusieurs conditions.
Sergey Alekseev
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.