Уникання логіки у поглядах
Проблема стандартного підходу полягає в тому, що він вимагає логіки у вигляді 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, але ця стаття показує, як додати або реалізувати її у своїх проектах.