0

Я использую несущую для загрузки изображения, но не смог. Пожалуйста, помогите мне.Не удается загрузить изображение с помощью carrierwave

Версии, используемые:

rails (4.0.1) 
carrierwave (0.10.0) 
carrierwave-mongoid (0.7.1) 
carrierwave_backgrounder (0.4.1) 

Мой загрузчик:

#<EventImageUploader:0x007fc6a948ede8 
@model=#<Event::EventImage 
_id: 5876f63b6c616cea34630000, 
c_at(created_at): 2017-01-12 03:21:31 UTC, 
image: nil, 
image_tmp: "1484191291-59956-9524/2016-12-10_23-45.jpg">, 
@mounted_as=:image> 

Мой образ nil, но изображение под image_tmp существует. Мой sidekiq тоже работает отлично.

Вот мой рабочий:

class ImageWorker < ::CarrierWave::Workers::StoreAsset 
    def perform(*args) 
    super(*args) 

    record = ::CarrierWave::Workers::Base.perform(*args) 
    if record 
     p "success" 
    else 
     raise "record #{args} not found, failed" 
    end 

    end 
end 

Как сделать закачивать работы? Спасибо.

ответ

0

После просмотра источника CarrierWave::Workers::StoreAsset#perform, причина, по которой изображение не может быть загружено, связано с вложенными документами.

Линия из источника record = resource.find id вернет nil, поскольку resource - это встроенный класс, и вы не можете найти id встроенным классом.

Чтобы решить эту проблему, см. here. Мой код должен работать, если я добавлю следующее:

class Event 
    include Mongoid::Document 

    embeds_many :images 
end 

class EventImage 
    include Mongoid::Document 

    embedded_in :Event 

    mount_uploader :image, ImageUploader 
    process_in_background :image 

    def self.find(id) 
    bson_id = Moped::BSON::ObjectId.from_string(id) # needed for Mongoid 3 

    root = Event.where('images._id' => bson_id).first 
    root.images.find(id) 
    end 
end 

Если вы получаете ошибку uninitialized constant Moped::BSON, убедитесь, что require это в первую очередь.

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