В моем приложении rails у меня есть модель под названием JobPosting. Задание проводок имеет статус, это может быть:Отображение состояния в представлении - Rails
- Ждущих утверждениям
- Проект
- Open
- Интервью Назначенных
- Закрытого
Я реализовал эти статусы, используя ActiveRecord::Enum как так:
class JobPosting < ApplicationRecord
enum status: [:waiting_approval, :draft, :open, :interviews_scheduled, :closed]
end
Теперь я хотел бы отобразить другой элемент пользовательского интерфейса, который зависит от статуса публикации задания. т.е.
Для статуса утверждения ожидания Я хочу:
<div class="label label-warning">pending approval</div>
И для открытого состояния Я хочу:
<div class="label label-success">open</div>
Обратите внимание, что есть другой текст и класс отличается как элемент стиль для разных случаев. В моей index.html.erb, где этот стиль должен произойти, я мог бы просто сделать кучу встроенного рубина, если заявления и проверить состояние проводки и отображение нужного элемента, например, так:
<% if posting.waiting_approval? %>
<div class="label label-warning">pending approval</div>
<% elsif posting.open? %>
<div class="label label-success">open</div>
<% elsif posting.closed> %>
etc...
<% end %>
I чувствую, что это не очень СУХОЙ, есть ли лучший способ?
В качестве альтернативы, я мог бы создать частичный и сохранить в нем логику и просто отринуть частичную, но опять же, как это делается?
Вы можете написать функцию, которая генерирует контент на основе значения перечисления – akash93
Что я обычно делаю с этим, это сделать статус частью класса, а затем написать css для присоединения к классу. Итак, label-draft, будет классом со стилями, которые вы хотите на нем, а затем в представлении только одна строка, «label - <% = posting.status%>» применит класс и стили, которые вы хотите. –
@RockwellRice, это хорошая идея, мне очень нравится эта реализация, хотя единственное, что мне не нравится, это то, что мне пришлось бы скомпрометировать мои имена статусов для имен классов CSS, которые более широко использовались в моем приложении. оправдать их изменение. В результате для ясности я предпочел бы сохранить имена статусов так, как они есть, а также не изменять классы CSS. –