Rails - 单行'if'速记在视图中不起作用

时间:2017-02-25 13:58:10

标签: html ruby-on-rails ruby

我的视图文件中有这个标记:

<ul class="nav navbar-nav navbar-right">
  <li class="nav-item"><a href="/merchants/list">Restaurants</a></li>
  <li class="nav-item"><a href="#">Contact</a></li>
  <li class="nav-item"><a href="#">Logout</a></li>
</ul>

为了有条件地显示Logout链接,我将单行if

<li class="nav-item"><a href="#">Logout</a></li> <% if condition %>

这不起作用并且出错。

完整if表格正常运作

 <% if condition %> <li class="nav-item"><a href="#">Logout</a></li> <% end %>

为什么速记在视图中不起作用的任何想法?

2 个答案:

答案 0 :(得分:2)

案例1:

<li class="nav-item"><a href="#">Logout</a></li> <% if condition %>

执行html语句,然后遇到ruby代码注入。前面的HTML代码在语法上与if条件无关 跟着它。如果您要将其更改为:

<% '<li class="nav-item"><a href="#">Logout</a></li>'.html_safe if condition %>

它会像你期望的那样工作。这里的html块是需要执行的语句的一部分 if条件评估为true之后

* html_safe是必需的,以允许将块视为HTML块而不是字符串。

案例2:

  

完整if表格正常运作

 <% if condition %> <li class="nav-item"><a href="#">Logout</a></li> <% end %>

首先遇到if条件,如果它评估为false,则跳过ifend之间的所有代码,并从块的结尾继续执行。因此,HTML不会被渲染。

答案 1 :(得分:0)

当然,if之前的那部分不是Ruby表达式。它与if无关,所以它期望完整的形式。 无论如何,这应该在纯Ruby中工作,但它不是那么好,我知道。

<%= content_tag(:li, class: 'nav-item') { link_to('Logout', your_path) } if condition -%>