2016-12-03 48 views
0

我正在使用carrierwave在我的rails項目中上傳圖像。這是我的uploader類。NoMethodError(未定義的方法`id'for nil:NilClass):在CarrierWave模型中

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

我在model使用mount_uploader :avatar , ProfilePictureUploader。相反,我用這個在我的模型

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

但是,這是給我一個錯誤說

NoMethodError(未定義的方法'身份證」的零:NilClass)

可以理解的model實例在ProfilePictureUploader中不可用。所以store_dir方法不能訪問model.id。我怎樣才能得到與此流程類似的目錄結構。

這不是this problem的重複。對我而言,uploadermodel屬性不可用。

+0

的可能的複製[Carrierwave:文件哈希和型號ID文件名/店\ _dir(http://stackoverflow.com/問題/ 18460686/carrierwave-file-hash-and-model-id-in-filename-store-dir) –

+0

This is not a duplicate of this http://stackoverflow.com/questions/18460686/carrierwave-file-hash- and-model-id-in-filename-store-dir。對我而言,上傳器的模型屬性不可用。 – raj

+0

是的,你是對的。 –

回答

0

我想你應該正確地與你的模型實例初始化您上傳:

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

嘿。謝啦。這工作。你能告訴我什麼''mounted_as''屬性代表什麼?有關於此的任何文檔? – raj

+0

通常它是模型的列名。例如:'mount_uploader:avatar,ProfilePictureUploader'在這裏:頭像是mounted_as。詳情https://github.com/carrierwaveuploader/carrierwave/blob/c45699c318ca895f89fa3304204e48b5f1c411f1/lib/carrierwave/uploader/mountable.rb –

相關問題