¿Cómo escribir if-condition en Haml?


Respuestas:


131

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

Pero cómo usar solo si modificador
Thillai Narayanan

solo use si como he editado en la respuesta.no es necesario que tenga un final.La sangría hará el resto.
bilash.saha

Una respuesta a su pregunta práctica: link_to_if api.rubyonrails.org/classes/ActionView/Helpers/…
Jeffrey LeCours

Quería tener otra declaración sin salida dentro de if like - if current_user - i = 5 y me preguntaba por qué no funcionaba, ¡aunque la he sangrado! Finalmente me di cuenta de que - tiene que ser sangrado :)
msanjay

¿Cómo agregar oroperador a la condición?
Joe Hany

18

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!"

1
Tenga en cuenta que realmente no es necesario =si desea generar una cadena simple como Hio Please sign in. =solo es necesario para evaluar Ruby, como= "Hi, #{@user.name}"
khustochka

8

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 %>

2

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}

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.