2011-04-08 66 views
4

因此,我有一个应用程序使用rails 3和mongodb来提供文件。我想使用runner进程将所有文件导入到gridfs中,而不必为系统中已有的文件创建新的ObjectId。实质上,我想使用carrierwave将文件附加到已经在数据库中的文件对象。如何将文件导入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

您可以保存新文件,以这种方式存在的对象:

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