现在,每次我需要显示用户的头像时,我都有if语句来检查他们是否上传了头像。我知道如果我通过我的html散布这些陈述,那绝对不是干的。
那么,找出要显示的图像的最佳方法是什么?
编辑:我正在使用Carrierwave(Paperclip由于某种原因不适合我)
答案 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