我的应用程序使用carrierwave 和omniauth (facebook),我有一个小问题。
- 当用户第一次使用 Facebook 帐户登录时,我将他的 Facebook 个人资料图片设为他的默认图片。(他不需要注册FB账号什么的。当他登录时,他已经注册了我的应用程序,没有提供任何更多信息)
- 当用户首次从我的应用程序“本地”创建帐户时,他可以选择上传个人资料图片。因此,
profile_image
在 User 模型中有一个字段,并且ProfileUploader
从carrierwave 安装在该字段上。
问题:当我将 facebook 图片 url 保存到这个字段时,它给了我错误。我认为发生这种情况是因为该字段安装了一个上传器,尽管该字段是字符串类型,但我不能只保存一个 URL 到该字段而不通过carrierwave 上传图像。
我通过将 FB 图像 url 存储到不同的字段来解决此问题other_profile_image
,并且每当从 FB 创建用户帐户时,我都会从该字段调用他的图像。
例如,
<% if @user.provider == "local" %>
<% if @user.profile_image.blank? %>
<%= link_to image_tag('default.jpg'), '/users/'+@user.id.to_s %>
<% else %>
<%= link_to image_tag(@user.profile_image_url(:thumb)), '/users/'+@user.id.to_s %>
<% end %>
<% elsif @user.provider == "facebook" %>
<%= link_to image_tag(@user.other_profile_image), '/users/'+@user.id.to_s %>
<% end %>
provider=local specifies accounts created on the application, not from other third-parties like FB
我的解决方法确实有效,但它困扰着我,因为我知道必须有更好的解决方案来处理这个问题。我需要了解如何处理以下简单任务:
- 用户在本地注册时,可以选择上传头像。如果他没有,我想将我的默认图片的 url 存储到他的个人资料图片 url 字段中。
- 当用户使用他的 FB 帐户时,他的 facebook 图像应该设置为他的初始个人资料图片。现在,我正在使用两个不同的字段,
profile_image
因为other_profile_image
当我尝试将 URL 字符串存储到 profile_image 字段中时,carrierwave 引发了错误,在该字段上安装了carrierwave 上传器。
我希望有一个很好的方法来解决这个问题!我提前感谢任何帮助。非常感谢。