如何在Haml中编写if条件?


Answers:


131

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

但是,如何仅在修改器时使用
Thillai Narayanan 2011年

只使用如果我已经在答案中进行过编辑。无需结束。缩进将完成其余工作。
bilash.saha

回答你的实际的问题:link_to_if api.rubyonrails.org/classes/ActionView/Helpers/...
杰弗里LeCours

我想在if like内添加另一个非输出语句-if current_user-i = 5,想知道为什么我缩进后为什么它不起作用!终于意识到-必须缩进:)
msanjay 2014年

如何将or运算符添加到条件?
Joe Hany

18

在haml中,两个运算符用于红宝石代码。

  • = 用于红宝石代码,该代码被评估并插入到文档中。

例:

= form_for @user  
  • - 用于已评估且未插入文档的红宝石代码。

例:

- if @user.signed_in?  
  = "Hi"  
- else  
  = "Please sign in!"

1
请注意,=如果您要输出纯字符串,例如Hi或,则不需要Please sign in=仅对于评估Ruby必要,例如= "Hi, #{@user.name}"
khustochka 2012年

8

在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

如果您想在标签中放入条件

%section{:class => "#{'new-class' if controller.action_name == 'index'}"}

更新

这是另一种变化

%nav(class="navbar"){class: content_for?(:navbar_class) ? yield(:navbar_class) : nil}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.