【问题标题】:How do you write inline Ruby on Rails ternary operators in an HTML tag with white space?如何在带有空格的 HTML 标记中编写内联 Ruby on Rails 三元运算符?
【发布时间】:2020-05-02 12:59:28
【问题描述】:

我目前遇到了一个问题,我试图通过使用三元运算符使 li 标签具有基于 Ruby 变量的特定类:

<li class=<%= loc == @ruby_var ? "nav-item active" : "nav-item" %>>
...
</li>

如果@ruby_var 为真,我希望结果是一个带有 nav-item 和 active 类的 li 元素:

<li class="nav-item active">
...
</li>

但是,由于某种原因,我得到了意想不到的结果,它只将类设置为三元运算符中字符串的第一部分 ,而将第二部分留在类之外标签:

<li class="nav-item" active>
...
</li>

我尝试在“nav-item active”字符串中使用多个空格,但任何空格似乎都使该类只接受字符串中的第一个元素。

使用三元运算符设置 HTML 标签的类的正确方法是什么?

【问题讨论】:

    标签: html ruby-on-rails ruby conditional-operator


    【解决方案1】:

    你可以这样写

    <li class="<%= loc == @ruby_var ? "nav-item active" : "nav-item" %>">
      # ...
    </li>
    

    注意 erb 表达式之外的 "

    或者你可以像这样使用tag helper

    <%= tag.li, class: ["nav-item", (:active if loc == @ruby_var)] do %>
      # ...
    <% end %>
    

    我更喜欢第二种选择,因为我不喜欢在描述标签时混合使用 HTML 和 ERB。

    【讨论】:

    • 第一种方法效果很好,但我很难理解它为什么有效。第一种方法不会返回两组双引号吗?如""nav-item active""
    • 不,您的版本根本不返回任何双引号。 &lt;%= "foo" %&gt; 只会将foo 插入到文档中,而不是"foo"。这意味着您的版本会生成&lt;li class=nav-item active&gt;,这会被浏览器误解为具有class 属性的li,其值为nav-item 和未知的active 属性。
    猜你喜欢
    • 2019-11-06
    • 2014-01-28
    • 2013-05-06
    • 1970-01-01
    • 2012-08-04
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多