无法通过载波上传图片

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 它。