NoMethodError(nil的未定义方法`id':NilClass):在CarrierWave模型中

时间:2016-12-03 14:36:58

标签: ruby-on-rails carrierwave

我正在使用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}}属性不可用。

1 个答案:

答案 0 :(得分:1)

我认为您应该使用模型实例正确初始化上传器:

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