Я иногда должен добавлять класс к элементу 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
), но это не принадлежит там. Что делает большинство людей?
Я использую первый способ, но с немного более сжатым синтаксисом:
<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 %>