Hamlでif-conditionを書く方法は?


回答:


131

HAMLはインデントベースであり、パーサーは扱いにくい場合があります。Hamlで「-end」を使用する必要はありません。代わりにインデントを使用してください。Hamlでは、Ruby評価コマンドの後にインデントを増やすとブロックが始まります。インデントが減少すると終了します。elseが次のようにブロックする場合のサンプル。

- if condition
  = something
- else
  = something_else

実用例

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

編集: if条件を使用したいだけの場合

 - if current_user
  = link_to 'Logout', logout_path

ただし、修飾子の場合にのみ使用する方法
Thillai Narayanan 2011年

答えを編集した場合と同じように使用します。終了する必要はありません。残りはインデントで行います。
bilash.saha 2011年

あなたの実用的な質問への答え:link_to_if api.rubyonrails.org/classes/ActionView/Helpers/...
ジェフリーLeCours

if like --if current_user --i = 5内に別の非出力ステートメントが必要で、インデントしたのになぜ機能しないのか疑問に思いました。最終的に-インデントする必要があることに気づきました:)
msanjay 2014

or条件に演算子を追加するにはどうすればよいですか?
ジョーハニー2016

18

hamlでは、2つの演算子がRubyコードに使用されます。

  • = 評価されてドキュメントに挿入されるRubyコードに使用されます。

例:

= form_for @user  
  • - 評価され、ドキュメントに挿入されないルビーコードに使用されます。

例:

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

1
またはの=ようなプレーンな文字列を出力する場合は、実際には必要ないことに注意してください。次のように、Rubyを評価するためにのみ必要ですHiPlease sign in== "Hi, #{@user.name}"
khustochka 2012

8

hamlでは、-(ダッシュ)を使用して、行がRubyコードであることを示します。さらに、インデントレベルはブロックレベルを示します。if / elseステートメントの2つを組み合わせます。

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

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

タグ内に条件を入れたい場合

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

更新

これが別のバリエーションです

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.