rails:使用从 oauth-twitter 导入的用户图像预填充表单

rails: Pre-fill a form with users image imported from oauth-twitter

所以我有一个网络应用程序可以让用户注册 Twitter。所以个人资料图片和姓名与他们的用户帐户相关联。

他们还可以创建个人资料(另一种模型),在这些个人资料中他们可以填写姓名、照片等。

我成功地从 Twitter 上的用户名预填充了名称字段,如下所示:

在我的profiles_controller.rb:

def new
@profile = Profile.new :twitter => current_user.name   
end

我想做的是在此表单中导入用户图片(从 twitter 导入)。

所以我尝试了:

  def new
    @pin = Pin.new :twitter => current_user.name, :image => current_user.image
  end

但我在表单中得到的只是损坏的图像预览。

由于我正在使用回形针在我的应用程序中上传图像,有没有办法将 Twitter 图像传输到表单中的回形针?我不知道该怎么做。任何帮助将不胜感激。

编辑:

这是我的用户模型的一部分,我在其中从 Twitter Oauth 检索用户图像: User.rb:

def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.nickname
      user.image = auth["info"]["image"].sub("_normal", "")
    end
  end

我认为用户形象是这样称呼的:

<%= image_tag user.image %>

但问题是如何将用户图片上传到个人资料表单:

我有:app/profile/views/_form.html.erb:

<%= f.file_field :image %>

如果这个 f.file_field 不想从其 Twitter 个人资料中上传不同的个人资料图片,我如何才能让他自动导入 users.image?

你真的不需要这样做。 Twitter 为个人资料图片提供 link,如果您查看文档...

"profile_image_url": 
         "http://a0.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png"

将URL存储在用户记录中,如果没有用户上传的图片,则使用url显示该图片。

您可以在每次 oAuth 登录时将它刷新到最新的 URL,这样您总是会显示用户的最新 Twitter 个人资料图片。

编辑

因此,在您的用户模型中创建一个字段来存储 Twitter 图像 url...

rails g migration AddTwitterImageToUser twitter_image.string
rake db:migrate

当您通过 Twitter 登录时填写该字段...

  def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.nickname
      user.twitter_image = auth.info.profile_image_url
    end
  end

然后显示...

<% if user && user.twitter_image.present? %>
  <img src="<%= user.twitter_image %>" >
<% end %>

我个人并不知道 "nickname" 是 Twitter API 中的一个可用字段,所以我对 [=] 中的 info 属性的内容不是很肯定15=] 对象...您可能想通过检查对象来确认图像 url 可用...将其转储到记录器或使用 pry.