【问题标题】:Ruby On Rails Tutorial - Gravatar Injects Text and Not ImageRuby On Rails 教程 - Gravatar 注入文本而非图像
【发布时间】:2012-07-24 06:11:10
【问题描述】:

问:如何在不过多修改教程代码的情况下解决此问题?我想减少远离教程代码。

我正在阅读 Michael Hartl 的在线 Ruby on Rails 教程。在第 7 章中,我们开始使用 Gravatar 插件引入个人资料照片。 (这似乎与 Rails 3 不兼容 - 但这不是问题。)

我的插件可以正常工作,但是我的 Rails 应用程序没有显示 Gravatar 图像。它显示一个文本字符串。即它将 Gravatar 代码作为文本而不是 html 标签注入。

而不是在文件中显示以下内容:

<img class="gravatar" alt="" width="52" height="52" src="http://www.gravatar.com/avatar/b58996c504c5638798eb6b511e6f49af?rating=PG&amp;size=52" />

它显示这个(显示文本,而不是图像):

&lt;img class=&quot;gravatar&quot; alt=&quot;&quot; width=&quot;52&quot; height=&quot;52&quot; src=&quot;http://www.gravatar.com/avatar/b58996c504c5638798eb6b511e6f49af?rating=PG&amp;amp;size=52&quot; /&gt;

我的视图文件包含:

<%= gravatar_for user, size: 52 %>

Gravatar 插件包含 (gravatar.rb):

def gravatar(email, options={})
  src = h(gravatar_url(email, options))
  options = DEFAULT_OPTIONS.merge(options)
  [:class, :alt, :size].each { |opt| options[opt] = h(options[opt]) }
  "<img class=\"#{options[:class]}\" alt=\"#{options[:alt]}\" width=\"#{options[:size]}\" height=\"#{options[:size]}\" src=\"#{src}\" />"
end

其他信息:

我正在开发一个运行 Rails 3.2 的 Windows 7 机器。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.2


    【解决方案1】:

    使用html_safe 方法告诉 Rails HTML 是可信的(因此不应转义):

    def gravatar_for email, options={}
      # ...
      "<img class=\"#{options[:class]}\" ... />".html_safe
    end
    

    背景:http://yehudakatz.com/2010/02/01/safebuffers-and-rails-3-0/

    顺便说一句,您可以而且可能应该通过使用 Rails 的内置 image_tag 助手来巧妙地完全回避这个问题,它的好处是摆脱了那个又长又丑的硬编码字符串:

    def gravatar_for email, options={}
      options = DEFAULT_OPTIONS.merge options
      options[:size] = "%{size}x%{size}" % options  # image_tag expects e.g. "48x48"
    
      image_tag gravatar_url(email, options), options
    end
    

    (不要让 "..." % options 把你吓跑——它基本上是 shorthand for sprintf。)

    【讨论】:

      【解决方案2】:

      试试

      <%= raw gravatar_for(user, size: 52) %>
      

      自 rails 3 以来的默认行为是在使用 &lt;%= ... %&gt; 时转义 HTML; raw 禁用此行为。

      More details

      【讨论】:

        猜你喜欢
        • 2017-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多