【问题标题】:bson_dump error when try to attach a file to mongoid paperclip field of a rails model尝试将文件附加到 rails 模型的 mongoid 回形针字段时出现 bson_dump 错误
【发布时间】:2013-06-10 12:05:47
【问题描述】:

我花了很多时间尝试将文件附加到 mongoid 回形针字段中。我发现的例子总是这样做的:

my_model_instance = MyModel.new
file = File.open(file_path)
my_model_instance.attachment = file
file.close
my_model_instance.save!

正如您在How to set a file upload programmatically using Paperclip 中看到的那样。

我做过的模型是:

class Logotype
    include Mongoid::Document
    include Mongoid::Paperclip

    has_mongoid_attached_file :logo,
      styles: {large: ['640x160'], small: ['300x300>']},
      size: { in: 0..3.megabytes },
      content_type: [ "image/jpg", "image/png", "image/bmp" ],
      storage: :filesystem,
      path: ':rails_root/public/resource/resources/:id/:style.:extension',
      url: '/logos/resources/:id/:style.:extension'

    validates_presence_of :logo
    validates_uniqueness_of :logo
end

但是我总是犯同样的大错误:

NoMethodError: undefined method `__bson_dump__' for /logos/resources/51b5bfaa69fd8a7941000005/original.jpg?1370865578:Paperclip::Attachment
...

有人可以帮我吗?提前致谢!

PD:对不起我的英语水平。

【问题讨论】:

    标签: ruby-on-rails mongoid paperclip


    【解决方案1】:

    这是一个老问题,但我只是想我会分享我的解决方案,以防其他人发现自己在这里。

    对我来说,这发生在 Moped::BSON::Extensions::Hash 模块中,同时尝试记录保存操作的请求。您的堆栈可能不同,但基本上在尝试转储 Mongoid 不知道如何处理的数据时会出现问题。就我而言,这是一个文件上传,ActionDispatch::Http::UploadedFile,但对于 OP,它是一个 Paperclip::Attachment

    我通过从请求参数中删除那些键/值对来解决它,例如

       # recursively remove UploadedFile from a Hash of request parameters 
       def remove_files(params)
          p = proc do |_, v|
            v.delete_if(&p) if v.respond_to? :delete_if
            v.is_a?(ActionDispatch::Http::UploadedFile)
          end
          params.delete_if(&p)
        end
    

    可能有更好的解决方案来记录文件名或其他内容,但我发现摆脱它更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多