我使用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 :(得分: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
。