Что изящный путь состоит в том, чтобы условно добавить класс к элементу HTML в представлении?

Я иногда должен добавлять класс к элементу HTML на основе условия. Проблема, я не могу выяснить очевидный способ выполнения ее. Вот пример материала, который я попробовал:

<div <%= if @status = 'success'; "class='ok'"; end %>>
   some message here
</div>

ИЛИ

<% if @status == 'success' %>
   <div class='success'>
<% else %>
   <div>
<% end %>
   some message here
</div>

Мне не нравится первый подход, потому что он переполнил взгляд и трудно читать. Мне не нравится второй подход, потому что вложение завинчено. Было бы хорошо поместить его в модель, (что-то как @status.css_class), но это не принадлежит там. Что делает большинство людей?

98
задан ryeguy 13 April 2010 в 04:11
поделиться

1 ответ

Я использую первый способ, но с немного более сжатым синтаксисом:

<div class="<%= 'ok' if @status == 'success' %>">

Хотя обычно вы должны представлять успех с логическим true или числовым идентификатором записи. и сбой с логическим false или nil . Таким образом, вы можете просто протестировать свою переменную:

<div class="<%= 'ok' if @success %>">

Вторая форма с использованием тернарного оператора ?: полезна, если вы хотите выбрать между двумя классами:

<div class="<%= @success ? 'good' : 'bad' %>">

Наконец, вы можете использовать Рейла. помощники тегов записи , такие как div_for , которые автоматически устанавливают ваш идентификатор и класс на основе предоставленной вами записи. Для человека с идентификатором 47:

# <div id="person_47" class="person good">
<% div_for @person, class: (@success ? 'good' : 'bad') do %>
<% end %>
132
ответ дан 24 November 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: