¿Cómo escribir declaraciones if
y if
- else
en Haml para una aplicación Ruby on Rails?
¿Cómo escribir declaraciones if
y if
- else
en Haml para una aplicación Ruby on Rails?
Respuestas:
HAML se basa en la sangría y el analizador puede ser complicado. No es necesario utilizar "- end" en Haml. Use sangría en su lugar. En Haml, un bloque comienza siempre que la sangría aumenta después de un comando de evaluación de Ruby. Termina cuando la sangría disminuye. Ejemplo de bloque if else de la siguiente manera.
- if condition
= something
- else
= something_else
Un ejemplo practico
- if current_user
= link_to 'Logout', logout_path
- else
= link_to 'Login', login_path
Editar: si solo desea usar la condición if, entonces
- if current_user
= link_to 'Logout', logout_path
or
operador a la condición?
En haml se utilizan dos operadores para el código ruby.
=
se utiliza para el código ruby que se evalúa y se inserta en el documento. Ejemplo:
= form_for @user
-
se utiliza para el código ruby que se evalúa y NO se inserta en el documento. Ejemplo:
- if @user.signed_in?
= "Hi"
- else
= "Please sign in!"
=
si desea generar una cadena simple como Hi
o Please sign in
. =
solo es necesario para evaluar Ruby, como= "Hi, #{@user.name}"
En haml, use el -
(guión) para indicar que una línea es código Ruby. Además, el nivel de sangría indica el nivel de bloque. Combine las dos declaraciones de if / else.
- if signed_in?
%li= link_to "Sign out", sign_out_path
- else
%li= link_to "Sign in", sign_in_path
es el mismo que el siguiente código en ERB:
<% if signed_in? %>
<li><%= link_to "Sign out", sign_out_path %></li>
<% else %>
<li><%= link_to "Sign in", sign_in_path %></li>
<% end %>
Si quieres poner condición dentro de tu etiqueta
%section{:class => "#{'new-class' if controller.action_name == 'index'}"}
ACTUALIZAR
Aquí hay otra variación
%nav(class="navbar"){class: content_for?(:navbar_class) ? yield(:navbar_class) : nil}
Aquí hay dos enlaces:
El primero es un convertidor: puede ingresar html o erb snippets y obtendrá haml