Carrierwave с MongoMapper ничего не возвращает не загруженным пользователям - PullRequest
0 голосов
/ 17 марта 2012

У нас есть пользовательская модель, которая реализует несущую для загрузки аватара.

Для пользователей, которые загрузили фотографию, все в порядке. Но для тех, кто этого не делает, когда вы вызываете метод #photo, вы ничего не получаете. Ни ноль, ни пустая строка, абсолютно ничего, поэтому мы не можем индексировать или делать ряд вещей из-за этого. Похоже, он должен вернуть ноль.

Есть мысли о том, как это сделать?

Я использую 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 голосов
/ 17 марта 2012

Просто внедрите default_url в Uploader для провайдера аватаром по умолчанию

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

Затем отобразите ваше изображение следующим образом

image_tag User.brandon.photo_url(:normal)
0 голосов
/ 17 марта 2012

Согласно документации , вы можете использовать blank?:

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