如何在 Haml 中编写 if 条件?
Posted
技术标签:
【中文标题】如何在 Haml 中编写 if 条件?【英文标题】:How to write if-condition in Haml? 【发布时间】:2011-12-23 00:29:25 【问题描述】:如何在Haml 中为Ruby on Rails 应用程序编写if
和if
-else
语句?
【问题讨论】:
【参考方案1】:在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 %>
【讨论】:
【参考方案2】: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
【讨论】:
但是怎么用只有if修饰符 如果我已经在答案中编辑过,就使用它。不需要结束。缩进将完成剩下的工作。 回答你的实际问题:link_to_if api.rubyonrails.org/classes/ActionView/Helpers/… 我想在 if like - if current_user - i = 5 中有另一个非输出语句,我想知道为什么它没有工作,虽然我已经缩进了它!终于意识到 - 必须缩进:) 如何在条件中添加or
运算符?【参考方案3】:
在 haml 中,两个运算符用于 ruby 代码。
=
用于评估并插入到文档中的 ruby 代码。
例子:
= form_for @user
-
用于评估但不会插入到文档中的 ruby 代码。
例子:
- if @user.signed_in?
= "Hi"
- else
= "Please sign in!"
【讨论】:
请注意,如果您想输出像Hi
或Please sign in
这样的纯字符串,您实际上并不需要=
。 =
仅用于评估 Ruby,例如 = "Hi, #@user.name"
【参考方案4】:
如果你想把条件放在你的标签里
%section:class => "#'new-class' if controller.action_name == 'index'"
更新
这是另一种变化
%nav(class="navbar")class: content_for?(:navbar_class) ? yield(:navbar_class) : nil
【讨论】:
以上是关于如何在 Haml 中编写 if 条件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Robot Framework 中编写 if 语句的多个条件