使用carrierwave添加AWS后,头像默认不再有效

时间:2013-12-05 12:10:55

标签: ruby-on-rails amazon-web-services

我在设置Carrierwave时设置了默认头像。它已不再有效。我在视图中尝试了这个工作,但它也没有工作。即使在用户上传头像图像后,默认也始终显示。

在我看来:              <%if @ avatar.nil? %GT;         <%= link_to image_tag(('/ assets / images / default.png')。to_s),user%>         <%else%>         <%= link_to image_tag(user.avatar.to_s,collection:user),user%>         <%end%>     

user.rb:     validates_presence_of:avatar,allow_blank:true

我也试过这个作为解决方法,但没有用:

def create
    @user = User.new(user_params)
    #@avatar = "/assets/images/'default.png'"
    if @user.save
      sign_in @user
      flash[:success] = "Welcome!"
      redirect_to :back
    else
       flash[:error] = "Please fill in required information."
       render 'new'
    end
end

session_helper.rb

def avatar_changed?
    @avatar = Avatar.find(params[:id])
    if user && user.read_attribute(:avatar).present?
      user.read_attribute(:avatar)
    else
      user.avatar.recreate_versions!
      avatar.save!
    end
  end

有关如何设置默认图片但是如果/当用户上传个人图片时更改它的任何建议吗?

由于

2 个答案:

答案 0 :(得分:0)

在carrierwave存储库中

Here is a thread。使用s3时default_url只是不起作用。他们只是没有让它发挥作用。

这是一个可能的解决方案:

  1. 将后备图像文件夹移动到app / assets / images

  2. 改变这样的default_url方法,其中ENV ['FOG_DIRECTORY']是你的s3桶的名称

    def default_url
       image = [version_name, "default.jpg"].compact.join('_')
       "http://s3.amazonaws.com/#{ENV['FOG_DIRECTORY']}/assets/fallback/#{image}"
    end
    
  3. 我实际上没有AccessDenied Error的解决方案,但您可以将此存储桶公开

答案 1 :(得分:0)

如果其他人遇到类似问题。在我看来,我正准备使用以下内容:

<% if current_user.avatar.present? %>
<%= link_to image_tag(current_user.avatar_url.to_s), current_user %>
<% else %>
<%= link_to image_tag(('/assets/images/default.png').to_s), current_user  %>
<% end %>

根据视图我更改了user.avatar.present ...和if @ avatar.present之间的对象?我以前一直试图普遍应用实例差异(@avatar),但这种方法不起作用。

相关问题