我正在使用carrierwave在我的rails项目中上传图片。这是我的uploader
课程。
class ProfilePictureUploader < CarrierWave::Uploader::Base
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
我在mount_uploader :avatar , ProfilePictureUploader
中使用model
<。相反,我在我的模型中使用它
uploader = ProfilePictureUploader.new
uploader.store!(file)
self.image = uploader.url
self.save
但是这给我一个错误说
NoMethodError(nil的未定义方法`id':NilClass)
可以理解model
实例在ProfilePictureUploader
中不可用。因此store_dir
方法无法访问model.id
。如何使用此流程获得类似的目录结构。
这不是this problem的重复。对我来说,model
的{{1}}属性不可用。
答案 0 :(得分:1)
我认为您应该使用模型实例正确初始化上传器:
mounted_as = "profile-or-something-else"
uploader = ProfilePictureUploader.new(self, mounted_as)
uploader.store!(file)
self.image = uploader.url
self.save