Wie schreibe ich if-Bedingung in Haml?


Antworten:


131

HAML basiert auf Einrückungen, und der Parser kann schwierig sein. Sie müssen "- end" in Haml nicht verwenden. Verwenden Sie stattdessen Einrückung. In Haml beginnt ein Block, wenn die Einrückung nach einem Ruby-Auswertungsbefehl erhöht wird. Es endet, wenn die Einrückung abnimmt. Beispiel, wenn sonst wie folgt blockieren.

- if condition
  = something
- else
  = something_else

Ein praktisches Beispiel

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

Bearbeiten: Wenn Sie nur if-Bedingung verwenden möchten, dann

 - if current_user
  = link_to 'Logout', logout_path

Aber wie man nur verwendet, wenn Modifikator
Thillai Narayanan

Verwenden Sie einfach, wenn Sie wie in der Antwort bearbeitet haben. Sie müssen kein Ende haben. Der Einzug erledigt den Rest.
bilash.saha

Eine Antwort auf Ihre praktische Frage: link_to_if api.rubyonrails.org/classes/ActionView/Helpers/…
Jeffrey LeCours

Ich wollte eine weitere Nicht-Ausgabeanweisung im if like - if current_user - i = 5 haben und fragte mich, warum es nicht funktionierte, obwohl ich es eingerückt habe! Endlich wurde klar, dass - eingerückt werden muss :)
msanjay

Wie füge orich der Bedingung einen Operator hinzu?
Joe Hany

18

In haml werden zwei Operatoren für Ruby-Code verwendet.

  • = wird für Ruby-Code verwendet, der ausgewertet und in das Dokument eingefügt wird.

Beispiel:

= form_for @user  
  • - wird für Ruby-Code verwendet, der ausgewertet wird und NICHT in ein Dokument eingefügt wird.

Beispiel:

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

1
Bitte beachten Sie, dass Sie dies nicht wirklich benötigen, =wenn Sie eine einfache Zeichenfolge wie Hioder ausgeben möchten Please sign in. =ist nur für die Bewertung von Ruby erforderlich, wie= "Hi, #{@user.name}"
Khustochka

8

Verwenden Sie in haml den -(Bindestrich), um anzugeben, dass eine Zeile Ruby-Code ist. Darüber hinaus gibt die Einrückungsstufe die Blockstufe an. Kombinieren Sie die beiden für if / else-Anweisungen.

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

entspricht dem folgenden Code 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

Wenn Sie eine Bedingung in Ihr Tag einfügen möchten

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

AKTUALISIEREN

Hier ist eine andere Variante

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.