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


101

Просто чтобы помочь другим разработчикам, потому что на SO нет подобного вопроса.

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

Ответы:


145

См. Примеры ниже:

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

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


2
Как бы вы сделали это для нескольких условий?
Максим Зубарев

Смотрите ниже в комментариях к вашему ответу.
Сергей Алексеев

3
Это также может добавить класс, например: div.councilor class=(councilor.retired? ? "retired" : "") генерирует:div.councilor.retired
Terra Ashley

20

Я использую массив классов и элемент nil, если нет необходимости включать класс в список, затем компактный массив, чтобы удалить элементы nil и, наконец, объединить все вместе.

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? вернуть false, и сгенерированный 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.