тонкий динамічний умовний клас [закрито]


100

Просто для того, щоб допомогти іншим розробникам, бо подібного питання щодо SO немає.

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

Відповіді:


144

Дивіться приклади нижче:

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

Цей же підхід можна використовувати для призначення динамічних значень іншим атрибутам.


2
Як би ти це зробив для кількох умов?
Максим Зубарев

Дивіться нижче в коментарях до вашої відповіді.
Сергій Алексєєв

3
Сюди ж можна додати клас, наприклад: div.councilor class=(councilor.retired? ? "retired" : "") generates:div.councilor.retired
Terra Ashley

20

Я використовую масив класів та нульовий елемент, якщо немає необхідності включати клас у список, потім компактний масив, щоб видалити нульові елементи та нарешті приєднатись до всіх разом.

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

12

Якщо у вас є кілька умов, я зараз роблю щось подібне

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

Хоча я вважаю, що це помилка, якщо is_bar? повернути помилкові та згенеровані результати HTML у

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

(вада - це порожній символ після foo). Якби хтось мав рішення, це було б приголомшливо.


7
Спробуйте String#rstripв цьому випадку з 2 -х умов: div class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip). Або div class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' '))на кілька умов.
Сергій Алексєєв
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.