我正在尝试为用户注册时设置默认图片。如果他们愿意,他们可以改变它,否则将给出默认图像。然而,input_html
似乎不起作用?
如何设置默认图像?
输入的当前简单形式:
<% default_picture = (image_path 'user.png') %>
<%= f.input :avatar, input_html: {value: '#{default_picture}'}, label: false %>
答案 0 :(得分:3)
您可以在模型中使用before_create
来设置默认图片。
before_create :set_default_avatar
def set_default_avatar
# your code
end
以及关于您的问题的其他讨论Rails - What is the best way to display default avatar if user doesn't have one?
答案 1 :(得分:1)
当用户未上传任何图片时,您无需使用默认图片。当用户的
avatar
为空时,您可以使用静态图像。只需调出默认图像
使用用户默认图像的集合的正确方法,您可以为任何帮助文件创建一个帮助方法,如helpers/application.html.erb
def avatar_for(user)
@avatar = user.avatar
if @avatar.empty?
@avatar_user = image_tag("user.png", alt: user.name)
else
@avatar_user = image_tag(@avatar.url, alt: user.name)
end
return @avatar_user
end
如果user.avatar
为空,则会显示user.png
文件夹中的默认assets/images
,否则会显示用户上传的图片
并将图片user.png
放到assets/images/
文件夹
然后你就可以像这样<{1}}来自.html.erb
文件
<%= avatar_for(current_user) %>
or
<%= avatar_for(@user) %>
#just pass user object from anywhere
或者如果你需要为不同的地方展示不同尺寸的图像,那么它就像这样
def avatar_for(user, width = '', height = '')
@avatar = user.avatar
if @avatar.empty?
@avatar_user = image_tag("user.png", alt: user.name, width: width, height: height)
else
@avatar_user = image_tag(@avatar.url, alt: user.name, width: width, height: height)
end
return @avatar_user
end
然后像这样召集
<%= avatar_for(current_user, 100, 100) %>
或者您可以使用gravatar
作为默认avatar
def avatar_for(user)
@avatar = user.avatar
if @avatar.empty?
gravatar_id = Digest::MD5::hexdigest(user.email).downcase
@avatar_user = "https://gravatar.com/avatar/#{gravatar_id}.png"
else
@avatar_user = image_tag(@avatar.url, alt: user.name)
end
return @avatar_user
end
您可以查看从RailsCast