Come scrivere if
e if
- else
dichiarazioni in Haml per un'applicazione Ruby on Rails?
Come scrivere if
e if
- else
dichiarazioni in Haml per un'applicazione Ruby on Rails?
Risposte:
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
or
operatore alla condizione?
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!"
=
se si desidera produrre una stringa semplice come Hi
o Please sign in
. =
è necessario solo per valutare Ruby, come= "Hi, #{@user.name}"
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 %>
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}
Ecco due link:
Il primo è un convertitore: puoi inserire frammenti html o erb e ottieni haml!