【问题标题】:Rails shorthand if/else output html [duplicate]Rails速记if / else输出html [重复]
【发布时间】:2016-05-10 20:50:41
【问题描述】:

当我使用的时候

<%= @inbox.automatic_reconciliation ? "<i class='fi-play-circle'></i>" : "<i class='fi-pause'></i>" %>

我的视图吐出页面上的实际代码而不是图标。我尝试使用 .to_html 之类的一些方法无济于事 - 我错过了什么?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 if-statement


    【解决方案1】:

    尝试使用html_safe 方法。

    <%= @inbox.automatic_reconciliation ? "<i class='fi-play-circle'></i>".html_safe : "<i class='fi-pause'></i>".html_safe %>
    

    documentation

    【讨论】:

      【解决方案2】:

      如果您坚持这样做,请使用raw 助手,它比html_safe 更受欢迎:

      <%= raw @inbox.automatic_reconciliation ? "<i class='fi-play-circle'></i>" : "<i class='fi-pause'></i>" %>
      

      到目前为止,更好的解决方案是从您的视图中删除此逻辑。创建一个辅助方法并简单地调用它:

      <i class="<%= automatic_reconciliation_class %>"></i>
      

      【讨论】:

      • 为什么是首选?除了nil 上的错误引发。两个输出都是一个字符串。
      • @Зелёный 当输入为nil 时,它更短、更清晰、不易错过并且不会引发异常。不,在这种情况下没有nil 输入的机会,但关键是您应该标准化一种方法,而raw 在一般情况下更好。 raw 是专门为在您的视图中使用而专门针对这种情况提供的辅助方法。 Rails 是一个约定俗成的地方,如果没有其他原因,您应该使用 raw
      【解决方案3】:

      您可以使用三元运算符使其变得简单:

      <i class="<%= @inbox.automatic_reconciliation ? "fi-play-circle" : "fi-pause" %>"></i>
      

      这直接在类名周围嵌入了条件,这大大清理了代码。只有类的名称可能会受到影响,因此 HTML 的其余部分与可能导致未来维护问题的偶然更改隔离开来。

      【讨论】:

        猜你喜欢
        • 2014-08-08
        • 2013-04-08
        • 2013-07-18
        • 2016-10-06
        • 2011-07-17
        • 1970-01-01
        • 2023-01-17
        • 2016-12-26
        • 2016-05-15
        相关资源
        最近更新 更多