Come scrivere if-condition in Haml?


Risposte:


131

HAML è basato sull'indentazione e il parser può essere complicato. Non è necessario utilizzare "- end" in Haml. Usa invece il rientro. In Haml, un blocco inizia ogni volta che il rientro viene aumentato dopo un comando di valutazione di Ruby. Termina quando il rientro diminuisce. Campiona if else blocca come segue.

- if condition
  = something
- else
  = something_else

Un esempio pratico

- if current_user
  = link_to 'Logout', logout_path
- else
  = link_to 'Login', login_path

Modifica: se vuoi usare solo la condizione if, allora

 - if current_user
  = link_to 'Logout', logout_path

Ma come usare solo se modificatore
Thillai Narayanan

basta usare se come ho modificato nella risposta. non c'è bisogno di finire. Il rientro farà il resto.
bilash.saha

Una risposta alla tua domanda pratica: link_to_if api.rubyonrails.org/classes/ActionView/Helpers/…
Jeffrey LeCours

Volevo avere un'altra dichiarazione non di output all'interno di if like - if current_user - i = 5 e mi chiedevo perché non funzionasse anche se l'ho indentata! Finalmente ho capito che - deve essere rientrato :)
msanjay

1
Come aggiungere l' oroperatore alla condizione?
Joe Hany

18

In haml vengono utilizzati due operatori per il codice ruby.

  • = viene utilizzato per il codice ruby ​​che viene valutato e inserito nel documento.

Esempio:

= form_for @user  
  • - viene utilizzato per il codice ruby ​​che viene valutato e NON viene inserito nel documento.

Esempio:

- if @user.signed_in?  
  = "Hi"  
- else  
  = "Please sign in!"

1
Si noti che non è realmente necessario =se si desidera produrre una stringa semplice come Hio Please sign in. =è necessario solo per valutare Ruby, come= "Hi, #{@user.name}"
khustochka

8

In haml, usa il -(trattino) per indicare che una riga è codice Ruby. Inoltre, il livello di rientro indica il livello di blocco. Combina le due istruzioni if ​​/ else.

- if signed_in?
  %li= link_to "Sign out", sign_out_path
- else
  %li= link_to "Sign in", sign_in_path

è lo stesso del codice seguente in 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

Se vuoi inserire condition all'interno del tuo tag

%section{:class => "#{'new-class' if controller.action_name == 'index'}"}

AGGIORNARE

Ecco un'altra variazione

%nav(class="navbar"){class: content_for?(:navbar_class) ? yield(:navbar_class) : nil}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.