2016-12-03 8 views
0

Ich verwende carrierwave, um Bilder in mein Rails-Projekt hochzuladen. Das ist meine uploader Klasse.NoMethodError (undefinierte Methode `id 'für nil: NilClass): im CarrierWave-Modell

class ProfilePictureUploader < CarrierWave::Uploader::Base 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 
end 

Ich bin nichtmount_uploader :avatar , ProfilePictureUploader in meinem model verwenden. Stattdessen verwende ich in meinem Modell

uploader = ProfilePictureUploader.new 
uploader.store!(file) 
self.image = uploader.url 
self.save 

Aber das gibt mir eine Fehlermeldung,

NoMethodError (nicht definierte Methode `id‘ für nil: NilClass)

Verständlicherweise die model Instanz ist nicht in ProfilePictureUploader verfügbar. So store_dir Methode kann nicht auf model.id zugreifen. Wie kann ich mit diesem Ablauf eine ähnliche Verzeichnisstruktur erhalten?

Dies ist kein Duplikat von this problem. Für mich ist das model Attribut von uploader nicht verfügbar.

+0

Mögliche Duplikat [Carrierwave: Dateihash und Modell-ID in Dateiname/store \ _DIR] (http://stackoverflow.com/ Fragen/18460686/carrierwave-Datei-Hash-und-Modell-ID-in-Dateiname-Store-Verzeichnis) –

+0

Dies ist kein Duplikat dieser http://stackoverflow.com/questions/18460686/carrierwave-file-hash- und-modell-id-in-filename-store-dir. Für mich ist das Model-Attribut von Uploader nicht verfügbar. – raj

+0

Ja, du hast Recht. –

Antwort

0

Ich glaube, Sie richtig Ihre Uploader mit Ihrem Modell Instanz initialisieren sollte:

mounted_as = "profile-or-something-else" 
uploader = ProfilePictureUploader.new(self, mounted_as) 
uploader.store!(file) 
self.image = uploader.url 
self.save 
+0

Hey. Danke, Mann. Das hat funktioniert. Kannst du mir sagen, wofür '' mounted_as'' Attribut steht? Irgendwelche Unterlagen dazu? – raj

+0

Normalerweise ist es der Name der Spalte Ihres Modells. Beispiel: 'mount_uploader: avatar, ProfilePictureUploader' hier: avatar ist mounted_as. Details https://github.com/carrierwaveuploader/carrierwave/blob/c45699c318ca895f89fa3304204e48b5f1c411f1/lib/carrierwave/uploader/mountable.rb –

Verwandte Themen