如何为 Rails 中的用户设置默认图像
How can I set a default image for user in Rails
我试图在用户注册时为他们设置默认图片。如果他们愿意,他们可以更改它,否则将给出默认图像。然而,input_html
似乎不起作用?
如何设置默认图片?
当前的简单输入形式:
<% default_picture = (image_path 'user.png') %>
<%= f.input :avatar, input_html: {value: '#{default_picture}'}, label: false %>
您可以在您的模型中使用 before_create
来设置默认图像。
before_create :set_default_avatar
def set_default_avatar
# your code
end
以及关于您的问题的其他讨论,
You don't need to work with a form of default image when user not uploaded any image. You can just use a static image when user's avatar
is empty. Just call out a default image
使用用户默认图像设置的正确方法,您可以为任何辅助文件创建一个辅助方法,例如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
为空,则会显示 assets/images
文件夹中的默认 user.png
,否则会显示用户上传的图片
并将图像 user.png
放入 assets/images/
文件夹
然后你可以像这样从 .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
生成gravatar头像的完整教程见RailsCast
我试图在用户注册时为他们设置默认图片。如果他们愿意,他们可以更改它,否则将给出默认图像。然而,input_html
似乎不起作用?
如何设置默认图片?
当前的简单输入形式:
<% default_picture = (image_path 'user.png') %>
<%= f.input :avatar, input_html: {value: '#{default_picture}'}, label: false %>
您可以在您的模型中使用 before_create
来设置默认图像。
before_create :set_default_avatar
def set_default_avatar
# your code
end
以及关于您的问题的其他讨论,
You don't need to work with a form of default image when user not uploaded any image. You can just use a static image when user's
avatar
is empty. Just call out a default image
使用用户默认图像设置的正确方法,您可以为任何辅助文件创建一个辅助方法,例如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
为空,则会显示 assets/images
文件夹中的默认 user.png
,否则会显示用户上传的图片
并将图像 user.png
放入 assets/images/
文件夹
然后你可以像这样从 .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
生成gravatar头像的完整教程见RailsCast