使用MongoMapper的Carrierwave不会为非上传的用户返回任何内容

时间:2012-03-17 15:47:17

标签: ruby-on-rails ruby ruby-on-rails-3 carrierwave

我们有一个用户模型,可以实现用于头像上传的载波。

对于已上传照片的用户,一切都很好。但对于那些不这样做的人,当你打电话给#photo方法时,你什么都没有。不是零,或空白字符串,绝对没有,所以我们不能索引或做很多事情因为这个。好像它应该返回nil。

有关如何实现这一目标的任何想法?

我正在使用http://github.com/brandonhilkert/carrierwave-mongomapper

class User
  mount_uploader :photo, PhotoUploader
  ...
end

class PhotoUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  storage :fog

  process :resize_to_fit => [200, 200]

  version :normal do
    process :resize_to_fill => [100, 100]
  end

  version :thumb do
    process :resize_to_fill => [50, 50]
  end

  def store_dir
    "#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

end

irb(main):024:0> User.brandon.photo
=> 
irb(main):025:0> User.brandon.photo.class
=> PhotoUploader
irb(main):026:0> User.chris.photo
=> https://[redacted]/IMG_1160_2_bigger.jpg
irb(main):027:0> User.chris.photo.class
=> PhotoUploader

2 个答案:

答案 0 :(得分:0)

根据the documentation,您可以使用blank?

User.brandon.photo.blank? # should be true
User.chris.photo.blank? # should be false

答案 1 :(得分:0)

只需在您的上传器中将default_url实现为提供商的默认头像

即可
def default_url
  "/assets/avatars/{version_name}_default.png"
end

然后按如下方式显示图像

image_tag User.brandon.photo_url(:normal)