Rails - 如果用户没有默认头像,显示默认头像的最佳方法是什么?

时间:2016-03-11 10:17:23

标签: ruby-on-rails ruby-on-rails-4

现在,每次我需要显示用户的头像时,我都有if语句来检查他们是否上传了头像。我知道如果我通过我的html散布这些陈述,那绝对不是干的。

那么,找出要显示的图像的最佳方法是什么?

编辑:我正在使用Carrierwave(Paperclip由于某种原因不适合我)

4 个答案:

答案 0 :(得分:1)

尝试使用辅助方法。这应该可以解决您的后顾之忧。你的助手就像是

def check_avatar(user)
     if user.image.nil?
       # return default image
    else
       #return user avatar
    end
end


您的观点中的用法将是
check_avatar(user)

答案 1 :(得分:1)

你可以用Paperclip

来做到这一点

您可以将以下内容添加到用户模型(app / models / user.rb):

has_attached_file :avatar, default_url: "avatar.png"

您必须将图像放入

app/assets/images/

答案 2 :(得分:1)

在CarrierWave的回购中有记载。

https://github.com/carrierwaveuploader/carrierwave#providing-a-default-url

  

提供默认网址

     

在许多情况下,特别是在处理图片时,提供默认网址可能是个好主意,如果没有上传文件,则可以提供备用网址。您可以通过覆盖上传器中的default_url方法轻松完成此操作:

class MyUploader < CarrierWave::Uploader::Base
  def default_url(*args)
    "/images/fallback/" + [version_name, "default.png"].compact.join('_')
  end
end
  

或者如果您正在使用Rails资产管道:

class MyUploader < CarrierWave::Uploader::Base
  def default_url(*args)
    ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
  end
end

答案 3 :(得分:1)

如果您的头像URL在您的数据库中存储了USER.AVATAR,那么:

class User
  DEFAULT_AVATAR = "xyz"
  def avatar
    read_attribute('avatar') || DEFAULT_AVATAR
  end
end