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

如何使上传工作?谢谢你。

4

1 回答 1

0

查看源码后CarrierWave::Workers::StoreAsset#perform,图片无法上传的原因是嵌入了文档。

来自源的record = resource.find id行将返回nil,因为resource它是一个嵌入式类,您无法通过嵌入式类找到 id。

要解决此问题,请参见此处。如果我添加以下内容,我的代码应该可以工作:

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

于 2017-01-12T06:24:42.203 回答