根据性别设置默认图像 - Carrierwave&设备

时间:2016-06-14 21:00:24

标签: ruby-on-rails ruby devise carrierwave

我使用carrierwave进行图片上传,但由于我无法访问image_uploader.rb到devise gem的var'current_user',因此当图片网址为nil时(创建或更新后),我无法根据性别设置默认图片),有工作吗?

上传/ image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base
 def default_url
  if (current_user.gender == "Male")
   ActionController::Base.helpers.asset_path("fallback/" + [version_name, "male.PNG"].compact.join('_'))
  else
   ActionController::Base.helpers.asset_path("fallback/" + [version_name, "female.PNG"].compact.join('_'))
  end
 end
end

2 个答案:

答案 0 :(得分:2)

如果image_uploader.rb是模块,请使用回调(例如User.rb)在您的after_create模型中调用它,传递用户对象并根据用户的性别设置图像。

这样的事情:

class User < ActiveRecord::Base
  after_create :set_default_url!

  def set_default_url!
    url = ImageUploader.default_url(gender)
    update!(url: url)
  end
end

然后,在你的模块中:

class ImageUploader < CarrierWave::Uploader::Base
  def self.default_url(gender)
    ActionController::Base.helpers.asset_path("fallback/" + [version_name, "#{gender.downcase}.PNG"].compact.join('_'))
  end
end

为简洁起见,显然省略了一些代码。

答案 1 :(得分:0)

解决方法是在app/assets/images

下添加两张照片“male / female.png”

然后在helpers / application_helper中创建此方法

def default_img(user)
  if user.avatar_url.nil?           
    if (user.gender == "Male")
         "male.PNG"
    else
        "female.PNG"
    end
  else
    user.avatar_url
  end
end

然后对每个img_tag

使用此方法