2015-02-17 16 views
11

ich zusätzliche Felder zum CarrierWave Uploader hinzufügen Ich versuche, so dass sie als Teil des Uploader selbst gespeichert werden und zusammen mit den CarrierWave Bereichen wie @file, @model, @storage usw.Zusätzliche Felder in CarrierWave Uploader

Die Felder sind auch versionsspezifisch, weshalb ich sie lieber über <my_model>.<my_uploader>.attribute und
<my_model>.<my_uploader>.versions[:<the_version>] anstelle von zusätzlichen Spalten im Modell aufrufen möchte.

Ich habe versucht, die carrierwave-meta gem, aber lief in einen Fehler damit (NoMethodError: undefined method \'original_filename' for #<CarrierWave::Storage::Fog::File:0xab4134c>) , die scheint noch nicht behoben worden zu sein.

Irgendwelche Ideen oder Vorschläge, wie Sie das am besten erreichen?

Antwort

3

Ich bin nicht 100% klar, was Sie versuchen zu tun.

Wenn ich Carrierwave-Juwel verwende, erstelle ich einen Pfad, der einige dieser Informationen enthält. In meinem applaications habe ich normalerweise eine Datei app/uploaders/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 

aus dem weiß ich immer das Modell, welche Art von Datei und die ID. Alle anderen Informationen über dieses Modell, die ich normalerweise in der Datenbank speichern.

Ich hoffe, das hilft und setzt Sie in die richtige Richtung

1

Ihre Fehler mit Nebel verbunden ist

In meinem Picture Uploader kann ich ein Attribut-Leser und -Schreiber gesetzt

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 

Die I öffnen die rails console das Modell zu testen:

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

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

picture.field 
"your text" 

Über die Versionierung und Fehler Sie 'NoMethodError: undefined method \'original_filename' for #<CarrierWave::Storage::Fog::File:0xab4134c>' Ich stimme mit MZaragoza

CarrierWave::Storage::Fog::File.new drei Parameter

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

uploader, self und uploader.store_path so um uns zu helfen, dieses Problem zu lösen, sollten Sie Ihre CarrierwaveUploader Modell-Code enthalten und die haben Ausgabe uploader.store_path

Vielen Dank

Verwandte Themen