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
.
所以我有一个网络应用程序可以让用户注册 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
.