在Haml中如何为Ruby on Rails应用程序编写if
和if
-else
语句?
在Haml中如何为Ruby on Rails应用程序编写if
和if
-else
语句?
Answers:
HAML基于缩进,并且解析器可能很棘手。您不需要在Haml中使用“-end”。请改用缩进。在Haml中,只要在Ruby评估命令后增加缩进量,块就会开始。缩进减少时结束,否则采样如下。
- if condition
= something
- else
= something_else
一个实际的例子
- if current_user
= link_to 'Logout', logout_path
- else
= link_to 'Login', login_path
编辑: 如果您只想使用条件
- if current_user
= link_to 'Logout', logout_path
or
运算符添加到条件?
在haml中,两个运算符用于红宝石代码。
=
用于红宝石代码,该代码被评估并插入到文档中。 例:
= form_for @user
-
用于已评估且未插入文档的红宝石代码。 例:
- if @user.signed_in?
= "Hi"
- else
= "Please sign in!"
=
如果您要输出纯字符串,例如Hi
或,则不需要Please sign in
。=
仅对于评估Ruby必要,例如= "Hi, #{@user.name}"
在haml中,使用-
(破折号)表示一行是Ruby代码。此外,缩进级别指示块级别。结合两个if / else语句。
- 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}