如何在 Haml 中编写 if 条件?

Posted

技术标签:

【中文标题】如何在 Haml 中编写 if 条件?【英文标题】:How to write if-condition in Haml? 【发布时间】:2011-12-23 00:29:25 【问题描述】:

如何在Haml 中为Ruby on Rails 应用程序编写ifif-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!"

【讨论】:

请注意,如果您想输出像HiPlease 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 条件?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过两个条件动作构成Haml形式

如何在 Haml 中包含内联 JavaScript?

如何在 Ruby 中编写复杂的多行 if 条件?

如何在 Robot Framework 中编写 if 语句的多个条件

如何在 SQL 中编写 if else if 条件 |甲骨文 |

如何在jquery中编写if else if语句,其中条件由wordpress选项设置设置