2016-12-03 4 views
0

Я использую несущую для загрузки изображений в проект моих рельсов. Это мой класс uploader.NoMethodError (undefined method `id 'for nil: NilClass): в модели CarrierWave

class ProfilePictureUploader < CarrierWave::Uploader::Base 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 
end 

Я не с помощью mount_uploader :avatar , ProfilePictureUploader в моей model. Вместо этого я использую это в моей модели

uploader = ProfilePictureUploader.new 
uploader.store!(file) 
self.image = uploader.url 
self.save 

Но это дает мне ошибку говоря

NoMethodError (неопределенный метод `идентификатор» для ноль: NilClass)

постижимо model экземпляра не доступен в ProfilePictureUploader. Таким образом, метод store_dir не может получить доступ к model.id. Как получить подобную структуру каталогов с этим потоком.

Это не дубликат this problem. Для меня атрибут modeluploader недоступен.

+0

Возможный дубликат [Carrierwave: хэш файла и модель идентификатор в имя файла/магазин \ _DIR] (http://stackoverflow.com/ вопросы/18460686/carrierwave-file-hash-and-model-id-in-filename-store-dir) –

+0

Это не дубликат этого http://stackoverflow.com/questions/18460686/carrierwave-file-hash- и-model-id-in-filename-store-dir. Для меня атрибут модели загрузчика недоступен. – raj

+0

Да, ты прав. –

ответ

0

Я думаю, вы должны правильно инициализировать загрузчик с помощью модели, например:

mounted_as = "profile-or-something-else" 
uploader = ProfilePictureUploader.new(self, mounted_as) 
uploader.store!(file) 
self.image = uploader.url 
self.save 
+0

Эй. Спасибо чувак. Это сработало. Можете ли вы сказать мне, что означает атрибут 'mount_as''? Любая документация по этому поводу? – raj

+0

Обычно это имя столбца вашей модели. Пример: 'mount_uploader: avatar, ProfilePictureUploader' здесь: аватар установлен_на_. Подробности https://github.com/carrierwaveuploader/carrierwave/blob/c45699c318ca895f89fa3304204e48b5f1c411f1/lib/carrierwave/uploader/mountable.rb –