Уникання логіки у поглядах
Проблема стандартного підходу полягає в тому, що він вимагає логіки у вигляді ifвисловлювань чи тернарів у погляді. Якщо у вас є кілька умовних класів CSS, змішаних з класами за замовчуванням, то вам потрібно ввести цю логіку в строкову інтерполяцію або тег ERB.
Ось оновлений підхід, який дозволяє уникнути будь-якої логіки у поглядах:
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
class_string метод
class_stringПомічник приймає хеш з парами ключ / значення , що складаються з імен рядків класу CSS і логічних значень . Результатом методу є рядок класів, де булеве значення оцінюється на істинне.
Використання зразка
class_names(foo: true, bar: false, baz: some_truthy_variable)
# => "foo baz"
Інші випадки використання
Цей помічник може використовуватися в ERBтегах або з такими помічниками Rails, як link_to.
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
<% div_for @person, class: class_string(ok: @success) do %>
<% end %>
<% link_to "Hello", root_path, class: class_string(ok: @success) do %>
<% end %>
Або / або класи
Для випадків використання, коли потрібен потрійний (наприклад @success ? 'good' : 'bad'), передайте масив, де перший елемент є класом для, trueа другий дляfalse
<div class="<%= [:good, :bad] => @success %>">
Натхненний React
Ця методика натхненна додатком під назвою classNames(раніше відомим як classSet) з Reactфронтальної бази Facebook .
Використання у ваших проектах Rails
На даний момент class_namesфункція не існує в Rails, але ця стаття показує, як додати або реалізувати її у своїх проектах.