【发布时间】:2011-12-23 00:29:25
【问题描述】:
如何在Haml 中为Ruby on Rails 应用程序编写if 和if-else 语句?
【问题讨论】:
标签: ruby-on-rails haml
如何在Haml 中为Ruby on Rails 应用程序编写if 和if-else 语句?
【问题讨论】:
标签: ruby-on-rails haml
在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 %>
【讨论】:
HAML 是基于缩进的,解析器可能很棘手。Haml 中不需要使用“-end”。改用缩进。在 Haml 中,只要在 Ruby 评估命令后缩进增加,就会开始一个块。当缩进减少时结束。示例 if else block 如下。
- 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 中,两个运算符用于 ruby 代码。
= 用于评估并插入到文档中的 ruby 代码。 例子:
= form_for @user
- 用于评估但不会插入到文档中的 ruby 代码。 例子:
- if @user.signed_in?
= "Hi"
- else
= "Please sign in!"
【讨论】:
Hi 或Please sign in 这样的纯字符串,您实际上并不需要=。 = 仅用于评估 Ruby,例如 = "Hi, #{@user.name}"
如果你想把条件放在你的标签里
%section{:class => "#{'new-class' if controller.action_name == 'index'}"}
更新
这是另一种变化
%nav(class="navbar"){class: content_for?(:navbar_class) ? yield(:navbar_class) : nil}
【讨论】: