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

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

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

person Sergey Alekseev    schedule 06.03.2013    source источник


Ответы (3)


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

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

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

person Sergey Alekseev    schedule 10.04.2013
comment
Как бы вы сделали это для нескольких условий? - person Maxim Zubarev; 24.01.2014
comment
Смотрите ниже в комментариях к вашему ответу. - person Sergey Alekseev; 25.01.2014
comment
Это также может добавить класс, например: div.councilor class=(councilor.retired? ? "retired" : "") генерирует: div.councilor.retired - person Terra Ashley; 13.07.2016

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

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

Если у вас есть несколько условий, я сейчас делаю что-то вроде

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

Хотя я чувствую, что это недостаток, если is_bar? возвращает false, и сгенерированный HTML приводит к

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

(пятно - это пробел после foo). Если бы у кого-то было решение для этого, было бы здорово.

person Maxim Zubarev    schedule 24.01.2014
comment
Попробуйте String#rstrip в этом случае с двумя условиями: div class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip). Или div class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' ')) для нескольких условий. - person Sergey Alekseev; 25.01.2014