如何在 Ruby on Rails 应用程序中使用 Haml 编写 if
和 if
-else
语句?
如何在 Ruby on Rails 应用程序中使用 Haml 编写 if
和 if
-else
语句?
HAML是基于缩进的,并且解析器可能会有些棘手。在Haml中,您不需要使用“-end”,而应改用缩进。在Haml中,块始于每次Ruby评估命令后增加缩进的位置,并在缩进减少时结束。示例if 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
Haml中有两个运算符用于Ruby代码。
=
用于评估并将其插入文档的Ruby代码。例子:
= form_for @user
-
用于Ruby代码的执行,而不是将其插入文档中。示例:
- if @user.signed_in?
= "Hi"
- else
= "Please sign in!"
=
。 =
仅在评估Ruby时才是必需的,例如=“嗨,#{@user.name}”
。 - khustochka-
(破折号)表示该行是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}
- if current_user - i = 5
但是我发现无论怎样缩进都不能正常工作!最后才意识到需要将“-”也进行缩进 :) - msanjay