2011-04-08 42 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