头像不显示

Gravatar image not displaying

我正在学习 Michael Hartl 在 Rails 上的 Ruby 教程,我添加了代码来显示用户的 Gravatar 图像。但是不显示。

这是我的用户助手

module UsersHelper
  # Returns the Gravatar (http://gravatar.com/) for the given user.
  def gravatar_for(user)
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
    gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}"
    image_tag(gravatar_url, alt: user.name, class: "gravatar")
  end
end

这是我的 show.html.erb

<% provide(:title, @user.name) %>
<div class="row">
  <aside class="col-md-4">
    <section class="user_info">
      <h1>
        <%= gravatar_for @user %>
        <%= @user.name %>
      </h1>
    </section>
  </aside>
</div>

这是我检查元素时的代码

    <img alt="humber" class="gravatar" src="https://secure.gravatar.com/avatar/8e92292186fbb306e253b08d0f3eb993">
    humber

this is the image

电子邮件是否正确提取?我有一个方法做类似的事情,默认 url 作为参数(以防用户电子邮件未在 gravatar 中注册。检查它是否可以帮助您:

  def avatar        
    default_url = "http://pcdoctorti.com.br/wp-content/plugins/all-in-one-seo-pack/images/default-user-image.png"
    gravatar_id = Digest::MD5::hexdigest(self.email).downcase
    "http://gravatar.com/avatar/#{gravatar_id}.png?d=#{CGI.escape(default_url)}"
  end

Ps: 这是用户模型中的一个实例方法

您的代码是正确的,也许您使用的用户没有电子邮件,或者电子邮件在 gravatar 中没有图像。我建议您验证用户是否有电子邮件

def gravatar_for(user)
    if user.email?
        gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
        gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}"
        image_tag(gravatar_url, alt: user.name, class: "gravatar")
    else
        image_tag("/img/avatar_default.png", alt: user.name, class: "gravatar")
    end
end

嗯....我尝试添加一个图像标签并向其添加哈希以查看它是否呈现(请删除它并在它起作用后使用 gravatar_for)。它做到了,所以这里是我为改进 gravatar_for 方法所做的步骤。希望对您有所帮助。

  1. 将头像来源从https://改为http://
  2. 在 gravatar_for 方法中添加更多 class 到 gravatar。它应该读作 image_tag(gravatar_url, 替代: user.name, class: "gravatar img img-responsive")

可能您完成了教程中的一项练习并编写了自定义 class 来隐藏图像

img {
  display: none;
}

我遇到了同样的问题,并尝试了到目前为止给出的所有解决方案(好吧,无论如何是前三个),但让我摸不着头脑。然后我从 URL 中删除了 'secure',如果工作得很好——或者至少对于与 gravatar 无关的 link。我的意思是,我期待显示默认的 gravatar 图片,它确实显示了!

(我也在学习 Michael Hartl 的课程。)

<% hex_digest = Digest::MD5::hexdigest('my_name@gmail.com') %>
<% gravatar_url = "https://gravatar.com/avatar/#{hex_digest}" %>
<%= image_tag(gravatar_url, alt: 'gravatar image') %>

我解决了!

教程指导你使用curl下载镜像;但这可能会导致文件损坏。为什么?本书编写时,网站上的文件是“.png”,而现在是“.svg”。名称也从 rails.png 更改为 rails-logo.svg。

按照指南,您下载了一个空白文件并将其另存为 .png,然后 rails 给您竖中指。

我目前(2018 年 2 月)正在使用 Rails 教程 (Rails 5) 书中 Ruby 的在线版本学习这门课程。我发现错误是遗留代码:

/sample_app/app/assets/stylesheets/custom.scss

/* hide all images */
img {
  display: none;
}

删除它可以让我的头像图片正确显示

As of 2018 Michael 的辅助函数 gravatar_for 的 URL 变量定义为:

gravatar_url = "https://secure.gravatar.com/gravatar/#{gravatar_id}"

但是 Gravatar's documentation 指示您使用:

gravatar_url = "https://www.gravatar.com/avatar/#{gravatar_id}"

前者对我不起作用,我收到 (404) 并且图像出现损坏。后者对我来说很好用。

在您的 custom.scss 文件中注释掉或删除以下行:

img {
    display: none;
}