2015-02-17 19 views
11

sto cercando di aggiungere altri campi alla CarrierWave Uploader in modo che essi sono conservati come parte del Uploader stesso e insieme con i campi CarrierWave, come ad esempio @file, @model, @storage ecccampi aggiuntivi in ​​CarrierWave Uploader

I campi sono anche specifici della versione, motivo per cui preferirei poterli accedere tramite <my_model>.<my_uploader>.attribute e
<my_model>.<my_uploader>.versions[:<the_version>] invece di colonne aggiuntive nel modello.

Ho provato il carrierwave-meta gem, ma ho riscontrato un errore con esso (NoMethodError: undefined method \'original_filename' for #<CarrierWave::Storage::Fog::File:0xab4134c>) che sembra non essere stato ancora risolto.

Qualche idea o suggerimento su come realizzare al meglio questo?

risposta

3

Non sono al 100% chiaro cosa stai provando a fare.

quando uso carrierwave gem, creo un percorso che contiene alcune di tali informazioni. Nei miei applaications solito ho un file app/uploader/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 

da questo So sempre il modello, il tipo di file, e l'id. Tutte le altre informazioni su questo modello di solito vengono salvate nel database.

Spero che questo aiuta e si pone nella giusta direzione

1

vostro errore è collegato con la nebbia

Nel mio Picture Uploader posso impostare un lettore di attributo e scrittore

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 

L'apro il rails console per testare il modello:

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

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

picture.field 
"your text" 

Informazioni sul controllo delle versioni e l'errore si stanno avendo 'NoMethodError: undefined method \'original_filename' for #<CarrierWave::Storage::Fog::File:0xab4134c>' Sono d'accordo con MZaragoza

CarrierWave::Storage::Fog::File.new prende tre parametri

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

uploader, self e uploader.store_path modo per aiutarci a risolvere questo problema si dovrebbe includere il codice del modello CarrierwaveUploader e la uscita di uploader.store_path

Grazie mille

Problemi correlati