如何在Rails中为用户设置默认图像

时间:2018-03-27 09:14:52

标签: ruby-on-rails simple-form simple-form-for

我正在尝试为用户注册时设置默认图片。如果他们愿意,他们可以改变它,否则将给出默认图像。然而,input_html似乎不起作用?

如何设置默认图像?

输入的当前简单形式:

<% default_picture = (image_path 'user.png') %>
<%= f.input :avatar, input_html: {value: '#{default_picture}'}, label: false %>

2 个答案:

答案 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

生成重力头像图片的完整教程