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.
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) –
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
Ja, du hast Recht. –