0

问:我怎样才能在不过多破解教程代码的情况下解决这个问题?我想减少远离教程代码。

我正在阅读 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 机器。

4

2 回答 2

1

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

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你失望——它基本上是 . 的简写 sprintf。)

于 2012-07-24T06:33:23.400 回答
0

尝试

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

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

更多细节

于 2012-07-24T06:35:58.553 回答