Jak napisać warunek warunkowy w Haml?


Odpowiedzi:


131

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

Ale jak używać tylko z modyfikatorem
Thillai Narayanan

po prostu użyj, jeśli tak jak ja redagowałem w odpowiedzi. nie ma potrzeby zakończenia. Wcięcie zrobi resztę.
bilash.saha

Odpowiedź na twoje praktyczne pytanie: link_to_if api.rubyonrails.org/classes/ActionView/Helpers/…
Jeffrey LeCours

Chciałem mieć inną instrukcję niebędącą wyjściem wewnątrz if like - if current_user - i = 5 i zastanawiałem się, dlaczego to nie działa, chociaż wciąłem go! W końcu zdałem sobie sprawę, że - musi być wcięty :)
msanjay

Jak dodać oroperator do warunku?
Joe Hany

18

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

1
Pamiętaj, że tak naprawdę nie potrzebujesz, =jeśli chcesz wyprowadzić zwykły ciąg, taki jak Hilub Please sign in. =jest konieczne tylko do oceny Rubiego, na przykład= "Hi, #{@user.name}"
khustochka

8

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

2

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}

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.