Тонкий динамический условный класс

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

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

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Хотя я чувствую, что это ошибка, если is_bar? return false и сгенерированные HTML-результаты в

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

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