Jak pisać if
i if
- else
instrukcje w Haml dla aplikacji Ruby on Rails?
Jak pisać if
i if
- else
instrukcje w Haml dla aplikacji Ruby on Rails?
Odpowiedzi:
HAML jest oparty na wcięciach, a parser może być trudny. Nie musisz używać "- end" w Haml. Zamiast tego użyj wcięć.W Haml, blok zaczyna się za każdym razem, gdy wcięcie zostanie zwiększone po poleceniu oceny Ruby. Kończy się, gdy wcięcie się zmniejsza. Przykład, jeśli else blokuje w następujący sposób.
- if condition
= something
- else
= something_else
Praktyczny przykład
- if current_user
= link_to 'Logout', logout_path
- else
= link_to 'Login', login_path
Edycja: Jeśli chcesz tylko użyć warunku if, to
- if current_user
= link_to 'Logout', logout_path
or
operator do warunku?
W hamlu do kodu ruby używane są dwa operatory.
=
jest używany do kodu ruby, który jest oceniany i wstawiany do dokumentu. Przykład:
= form_for @user
-
jest używany dla kodu ruby, który jest oceniany i NIE jest wstawiany do dokumentu. Przykład:
- if @user.signed_in?
= "Hi"
- else
= "Please sign in!"
=
jeśli chcesz wyprowadzić zwykły ciąg, taki jak Hi
lub Please sign in
. =
jest konieczne tylko do oceny Rubiego, na przykład= "Hi, #{@user.name}"
W hamlu użyj -
(myślnika), aby wskazać, że wiersz jest kodem Ruby. Ponadto poziom wcięcia wskazuje poziom bloku. Połącz oba dla instrukcji if / else.
- if signed_in?
%li= link_to "Sign out", sign_out_path
- else
%li= link_to "Sign in", sign_in_path
jest taki sam jak poniższy kod w ERB:
<% if signed_in? %>
<li><%= link_to "Sign out", sign_out_path %></li>
<% else %>
<li><%= link_to "Sign in", sign_in_path %></li>
<% end %>
Jeśli chcesz umieścić stan w swoim tagu
%section{:class => "#{'new-class' if controller.action_name == 'index'}"}
AKTUALIZACJA
Oto kolejna odmiana
%nav(class="navbar"){class: content_for?(:navbar_class) ? yield(:navbar_class) : nil}
Oto dwa linki:
Pierwszy to konwerter - możesz wpisać fragmenty html lub erb i otrzymasz haml!