Evitando la lógica en las vistas
El problema con el enfoque estándar es que requiere lógica en forma de if
declaraciones o ternarios en la vista. Si tiene varias clases CSS condicionales mezcladas con clases predeterminadas, entonces necesita poner esa lógica en una interpolación de cadenas o etiqueta ERB.
Aquí hay un enfoque actualizado que evita poner lógica en las vistas:
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
class_string
método
El class_string
ayudante toma un hash con pares clave / valor que consisten en cadenas de nombres de clases CSS y valores booleanos . El resultado del método es una cadena de clases donde el valor booleano se evalúa como verdadero.
Uso de la muestra
class_names(foo: true, bar: false, baz: some_truthy_variable)
# => "foo baz"
Otros casos de uso
Este ayudante se puede utilizar dentro de ERB
etiquetas o con ayudantes de Rails como 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 %>
Clases una u otra
Para los casos de uso en los que sería necesario un ternario (por ejemplo @success ? 'good' : 'bad'
), pase una matriz donde el primer elemento es la clase para true
y el otro es parafalse
<div class="<%= [:good, :bad] => @success %>">
Inspirado por React
Esta técnica está inspirada en un complemento llamado classNames
(anteriormente conocido como classSet
) de FacebookReact
marco front-end .
Uso en sus proyectos de Rails
A partir de ahora, la class_names
función no existe en Rails, pero este artículo le muestra cómo agregarla o implementarla en sus proyectos.