首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过carrierwave上传图像

无法通过carrierwave上传图像
EN

Stack Overflow用户
提问于 2017-01-12 12:48:40
回答 1查看 267关注 0票数 0

我正在使用carrierwave上传我的图像,但失败了。请帮帮我。

使用的版本:

代码语言:javascript
复制
rails (4.0.1)
carrierwave (0.10.0)
carrierwave-mongoid (0.7.1)
carrierwave_backgrounder (0.4.1)

我的上传者:

代码语言:javascript
复制
#<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也运行得很好。

这是我的工人:

代码语言:javascript
复制
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

如何让上传工作正常?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 14:24:42

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

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

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

代码语言:javascript
复制
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操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41605310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档