【问题标题】:Rails View Helper Not Inserting HTML into PageRails View Helper 未将 HTML 插入页面
【发布时间】:2010-09-30 14:20:02
【问题描述】:

我在我的 Rails (3.0) 应用程序中使用自定义帮助方法来输出所需的 html 时遇到问题。

在我的部分视图中,我有以下调用: _label.html.erb

<% display_resource "Diamond", @resource.diamond %>

并且在resource_helper.rb文件中:

module ResourceHelper
   def display_resource(display_name, value)
      "<tr><td>#{display_name} </td><td>#{value.to_s}%</td></tr>" if value > 0
   end
end

预期的输出是:

<tr>
  <td>Diamond</td>
  <td>15%</td>
<tr>

*授予,没有格式,15是任意的

如果我在执行方法调用时使用 ,它将正确输出字符串,但不会是 html(即我会看到 "&lt;tr&gt;&lt;td&gt;Diamond &lt;/td&gt;&lt;td&gt;15%&lt;/td&gt;&lt;/tr&gt;" 而不是 "Diamond 15%")

我做错了什么?

【问题讨论】:

  • 不打印的主要原因是你使用&lt;% %&gt;而不是&lt;%= %&gt;
  • 如果我使用 它会输出字符串,但它会是实际的字符串(因为这是 rails 现在的默认行为 - 以防止 XSS 和其他类型的可能出现的安全漏洞)

标签: ruby-on-rails html-helper


【解决方案1】:

您需要将返回的字符串标记为“raw”,然后使用

module ResourceHelper
   def display_resource(display_name, value)
      raw("<tr><td>#{display_name} </td><td>#{value.to_s}%</td></tr>") if value > 0 # string wrapped in raw
   end
end

【讨论】:

  • 我刚刚将一个应用迁移到 Rails 3,我想问一下:这是 Rails 3 如何处理 HTML Safe 字符串的新行为,对吗?
  • @Robbie - 我相信是这样 - 这就是为什么我遇到这个问题(但不知道如何纠正它。感谢 Rob 的帮助!
  • 是的,这是 rails 呈现文本的新方式。默认情况下,所有在 之间渲染的文本都会被转义,如果你有一些需要显示的 html,你需要使用 raw()
  • 你的聪明,我感谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多