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

NoMethodError (undefined method `id' for nil:NilClass): in CarrierWave model

我在 rails 项目中使用载波上传图像。这是我的 uploader class.

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 (undefined method `id' for nil:NilClass)

可以理解 model 实例在 ProfilePictureUploader 中不可用。所以 store_dir 方法无法访问 model.id。如何使用此流程获得类似的目录结构。

这不是 this problem 的副本。对我来说,uploadermodel 属性不可用。

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

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