无法通过载波上传图片
Cannot upload image by 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
如何使上传有效?谢谢。
查看 CarrierWave::Workers::StoreAsset#perform
的来源后,
图片无法上传的原因是嵌入了文档。
来自源 record = resource.find id
的行将 return nil
因为 resource
是嵌入的 class 并且您无法通过嵌入的 [=26] 找到 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
它。
我正在使用载波上传我的图片但失败了。请帮助我。
使用的版本:
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
如何使上传有效?谢谢。
查看 CarrierWave::Workers::StoreAsset#perform
的来源后,
图片无法上传的原因是嵌入了文档。
来自源 record = resource.find id
的行将 return nil
因为 resource
是嵌入的 class 并且您无法通过嵌入的 [=26] 找到 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
它。