如何为 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