2016-12-03 49 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 –

相关问题