【问题标题】:Ruby on Rails seems to be auto-escaping html created by link_toRuby on Rails 似乎是由 link_to 创建的自动转义 html
【发布时间】:2011-03-25 15:43:51
【问题描述】:

这是我的代码,我正在尝试使用 .to_sentence 以句子形式显示指向 bboy 船员的链接列表

<span class="affiliation">
    <% if(@bboy.crews.count > 0)%>
    <span><%= if(@bboy.crews.size > 1) then "Crew".pluralize else "Crew" end %>:</span>
    <%= @bboy.crews.collect{|c| link_to c.name, c}.to_sentence %>
    <% else %>  
    <em>Independent</em>
    <% end %>
</span>

我得到的输出是正确的链接,但它显示为:

<a href="/crews/1">Hustle Kidz</a> and <a href="/crews/2">Knuckleheads Cali</a>

而不是:

Hustle KidzKnuckleheads Cali

转义 html,而不是所需的链接。

我错过了什么吗?我已经尝试过 CGI.unescapeHTML 和其他一些,但我迷路了......

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    Rails 3 现在自动转义所有内容,为了输出原始 HTML,请使用:

    <%= some_string.html_safe %>
    

    或者这个:

    <%= raw @some_html_string %>
    

    感谢macek 的提示。

    更多详情:http://markconnell.co.uk/posts/2010/02/rails-3-html-escaping

    【讨论】:

    • 太棒了,效果很好!我还注意到它在 bboy.crews.size 为 1 时有效,但在大于 1 时无效...知道为什么吗?
    • 我认为这是因为当一组成员中只有一个元素时 - “to_sentence” 方法不会从所有链接中创建一个红宝石字符串,这就是 Rails 没有逃避它的原因,和通常的 link_to 作品。
    【解决方案2】:

    您可以(并且应该)使用raw 方法

    <%= raw @some_html_string %>
    

    【讨论】:

    【解决方案3】:

    我同意 Kleber S 的观点,你应该把它移到一个帮助器中,因为这对于视图来说有很多逻辑

    def crews_description(crews)
      if crews.empty?
        content_tag('em', 'Independent')
      else
        label = "Crew"
        label = label.pluralize if crews.size > 1
        crews_links = crews.map {|crew| link_to(h(crew.name), crew)}.to_sentence
        content_tag('span', label) + crews_links.html_safe
      end
    end
    

    在你看来:

    <span class="affiliation">
      <%= crews_description(@bboy.crews)
    </span>
    

    【讨论】:

      【解决方案4】:

      我建议您将此代码块移至帮助程序,然后使用 .html_safe 方法获得预期结果。

      【讨论】:

      • 为什么要把它移到一个助手那里?
      猜你喜欢
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      相关资源
      最近更新 更多