我已经看过以下内容,但它们并不清楚,特别是对DataMapper和gem依赖项的引用.
我想要的结果就是能够获取| do |中的@ user.email值 循环并显示一个gravatar,其中identicon设置为"y" - 换句话说,那些可爱的看似随意的图纸!
但是,当我查看可用的内容时,不清楚该做什么 - 特别是对DataMapper和gem依赖项的引用.
http://github.com/chrislloyd/gravtastic/tree/master
我正在玩这个,但我想在潜水之前得到别人的反馈!
http://www.thechrisoshow.com/2008/10/27/adding-gravatars-to-your-rails-apps
我安装了wood gravatar插件:
http://github.com/woods/gravatar-plugin/tree/master与下面提到的相同...但是,当我输入时出现错误:
<%= gravatar_for @user %>
Run Code Online (Sandbox Code Playgroud)
错误是:
undefined method `gravatar_for' for #<ActionView::Base:0x474ddf4>
Run Code Online (Sandbox Code Playgroud)
Now*_*ker 13
将此代码放在ApplicationHelper中,以便gravatar_for在所有视图中都可用.
def gravatar_for email, options = {}
options = {:alt => 'avatar', :class => 'avatar', :size => 80}.merge! options
id = Digest::MD5::hexdigest email.strip.downcase
url = 'http://www.gravatar.com/avatar/' + id + '.jpg?s=' + options[:size].to_s
options.delete :size
image_tag url, options
end
Run Code Online (Sandbox Code Playgroud)
在视图中:
<%= gravatar_for 'my@mail' %>
<%= gravatar_for 'my@mail', :size => 48 %>
<%= gravatar_for 'my@mail', :size => 32, :class => 'img-class', :alt => 'me' %>
Run Code Online (Sandbox Code Playgroud)
我提炼了倾斜的解决方案.遵循Gravatar指南,电子邮件应在散列之前进行修剪和降低.此外,似乎require 'digest'不需要(在Rails 3上测试).
不要重复太多,而是要给出更详细的答案:
正如Sam152所说,您必须从用户的电子邮件地址创建一个MD5哈希值,然后在对Gravatar服务器的GET请求中使用该哈希值.
获取MD5哈希值的最简单方法是通过Digest,它是ActionPack(ActionView内部)gem的一部分.将以下内容放在'config/environment.rb'中:
require 'digest'
Run Code Online (Sandbox Code Playgroud)
现在,您只需要在显示用户的gravatar的地方使用以下内容:
image_tag("http://www.gravatar.com/avatar.php?gravatar_id=#{Digest::MD5::hexdigest(@user.email)}", :alt => 'Avatar', :class => 'avatar')
Run Code Online (Sandbox Code Playgroud)
这不需要额外的宝石,如果你需要的只是拉入用户的gravatar,你可以根据需要创建一个帮助器.
有一个 Gravatar Rails 插件可以在这里找到:
http://gravatarplugin.rubyforge.org/
像这样安装插件:
ruby script/plugin install svn://rubyforge.org//var/svn/gravatarplugin/plugins/gravatar
Run Code Online (Sandbox Code Playgroud)
安装插件后,如果您的模型响应“电子邮件”方法,此标签将显示 Gravatar:
<%= gravatar_for @user %>
Run Code Online (Sandbox Code Playgroud)