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.