2016-10-02 2 views
1

В моей модели User используется несущая волна для создания изображений, к которым обращаются как @user.photo.thumb. Это не фотомодель, photo - string column в User. Однако некоторые пользователи не загрузили photo, поэтому я хочу создать оператор if/else, который скажет мне, загрузили ли они фотографию или нет.Как спросить, существует ли @ user.photo? созданный из (класс PhotoUploader <CarrierWave :: Uploader)

<% if @user.photo %> возвращает true, хотя пользователь еще не загрузил фотографию.

<% if @ user.photo.nil? %> return false, однако в консоли Heroku он показывает column photo как nil для этого user.

и = User.find (5)
=> Идентификатор пользователя: 5, имя: "Губка Боб", ..., фото: ноль>

class User < ActiveRecord::Base 
    mount_uploader :photo, PhotoUploader 
end 

class PhotoUploader < CarrierWave::Uploader::Base 
    include CarrierWave::MiniMagick 
    version :thumb do 
    process resize_to_fill: [150,150] 
    end 

    if Rails.env.production? 
    storage :fog 
    else 
    storage :file 
    end 

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

Это для использования как аватар. Я хочу изображение аватара по умолчанию, если они не загрузили свою собственную фотографию.

ответ

1

Если вы посмотрите на readme, вы можете просто переопределить default_url в своем загрузчике. Поэтому, если изображение отсутствует, оно будет показывать значение по умолчанию.

class PhotoUploader < CarrierWave::Uploader::Base 
    def default_url(*args) 
    ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) 
    end 
end 

Это если вы используете pipepline активов в модели

, если вы хотите, чтобы увидеть, если файл существует, что нужно сделать

@user.photo.file.nil? 

Так что будет проверять файл фактически существующий.

+0

'существует?' Не работает, но '@ user.photo.file.nil?' Делает. Благодарю. –

+0

Хмм делал это из памяти, вздох. Обновлено, чтобы быть .nil ?, вынос - это то, что фотография была заменена загрузчиком, поэтому вам нужно в нее копать, чтобы получить то, что вы ищете, поскольку это не просто простое поле/строка из БД. – Doon

Смежные вопросы