如何将文件导入Carrierwave

时间:2011-04-08 00:58:43

标签: ruby-on-rails-3 mongoid carrierwave gridfs

所以我有一个使用rails 3和mongodb提供文件的应用程序。我想使用转轮进程将所有文件导入gridfs,而不为系统中已有的文件创建新的ObjectId。基本上,我想使用carrierwave将文件附加到数据库中已有的文件对象。

出于某种原因,当我创建一个新的文件文档时,我可以毫无问题地附加本地文件。但是,我不能将本地文件附加到以前创建的文档中。

我已经尝试过各种形式的Mongoid更新,并且每当我得到方法丢失或未识别的方法时。

例如,这有效:

somefile = Upload.new(
  :name => "somefile.ext"
)
somefile.upload = File.open("/foo/bar.ext")
somefile.save!

但这不是:

somefile = Upload.first(:conditions => {:name => "somefile.ext"})
somefile.upload = File.open("/foo/bar.ext")
somefile.save!

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以这种方式为现有对象保存新文件:

somefile = Upload.find_by_name("somefile.ext").first
unless somefile.blank?
  somefile.remove_upload = true
  somefile.save!
  somefile.upload = File.open("/foo/bar.ext")
  somefile.save!
end

如您所见,

somefile.remove_upload = true

装置

somefile.remove_your_mounted_uploader = true