我的视图文件中有这个标记:
<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 %>
为什么速记在视图中不起作用的任何想法?
答案 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
,则跳过if
和end
之间的所有代码,并从块的结尾继续执行。因此,HTML不会被渲染。
答案 1 :(得分:0)
当然,if之前的那部分不是Ruby表达式。它与if无关,所以它期望完整的形式。 无论如何,这应该在纯Ruby中工作,但它不是那么好,我知道。
<%= content_tag(:li, class: 'nav-item') { link_to('Logout', your_path) } if condition -%>