2015-02-17 21 views
11

我試圖讓他們被存儲爲上傳本身的一部分,並與CarrierWave領域的合作,增加額外的字段到CarrierWave上傳,如@file@model@storage在CarrierWave上傳附加字段

這些字段也是版本特定的,這就是爲什麼我更願意通過<my_model>.<my_uploader>.attribute
<my_model>.<my_uploader>.versions[:<the_version>]而不是模型中的其他列訪問它們的原因。

我嘗試過carrierwave-meta gem,但遇到了一個錯誤(NoMethodError: undefined method \'original_filename' for #<CarrierWave::Storage::Fog::File:0xab4134c>) ,似乎還沒有被修復。

有關如何最好地完成此任何想法或建議?

回答

3

我不是100%清楚你想要做什麼。

當我使用carrierwave寶石時,我確實創建了一個保存某些信息的路徑。在我applaications我通常有一個文件應用程序/上傳/ image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base 
    include CarrierWave::RMagick 
    def store_dir 
     # "uploads/image/file/187/" 
     "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 
    ... 
    end 

從此我總是知道該模型,文件是什麼類型的,和ID。 關於這個模型的所有其他信息我通常保存在數據庫中。

我希望這可以幫助,並設置你在正確的方向

1

你的錯誤與霧連接

在我Picture Uploader我可以設置一個屬性讀寫器

class PictureUploader < CarrierWave::Uploader::Base 
    include CarrierWave::MiniMagick 
    storage :file 

    def field 
    @field 
    end 

    def field=(field) 
    @field = field 
    end  

    # attr_accessor :field # for an even shorter way 
end 

的我打開rails console測試型號:

picture = PictureUploader.new 
=> #<PictureUploader:0x0055804db336e8 @model=nil, @mounted_as=nil> 

picture.field=('your text') 
=> "your text" 

picture.field 
"your text" 

關於您有'NoMethodError: undefined method \'original_filename' for #<CarrierWave::Storage::Fog::File:0xab4134c>'的版本和錯誤我MZaragoza

CarrierWave::Storage::Fog::File.new同意接受三個參數

def store!(file) 
    f = CarrierWave::Storage::Fog::File.new(uploader, self, uploader.store_path) 
    f.store(file) 
    f 
    end 

uploaderselfuploader.store_path所以幫我們解決了這個問題,你應該包括你的CarrierwaveUploader模型代碼和輸出uploader.store_path

非常感謝