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

如何在Haml 中为Ruby on Rails 应用程序编写ifif-else 语句?

【问题讨论】:

    标签: ruby-on-rails haml


    【解决方案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}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-25
        • 2016-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-14
        • 2017-09-18
        相关资源
        最近更新 更多