Ruby on RailsアプリケーションのHamlでステートメントを記述if
してif
-else
ステートメントを作成する方法は?
回答:
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
or
条件に演算子を追加するにはどうすればよいですか?
hamlでは、2つの演算子がRubyコードに使用されます。
=
評価されてドキュメントに挿入されるRubyコードに使用されます。 例:
= form_for @user
-
評価され、ドキュメントに挿入されないルビーコードに使用されます。 例:
- if @user.signed_in?
= "Hi"
- else
= "Please sign in!"
=
ようなプレーンな文字列を出力する場合は、実際には必要ないことに注意してください。次のように、Rubyを評価するためにのみ必要ですHi
Please sign in
=
= "Hi, #{@user.name}"
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 %>
タグ内に条件を入れたい場合
%section{:class => "#{'new-class' if controller.action_name == 'index'}"}
更新
これが別のバリエーションです
%nav(class="navbar"){class: content_for?(:navbar_class) ? yield(:navbar_class) : nil}
ここに2つのリンクがあります:
1つ目はコンバーターです。htmlまたはerbスニペットを入力すると、hamlを取得できます。