我的结构如下:一个Fsvideo对象属于一个User,并且建立了外键关系。视频对象上传到 Amazon S3 存储桶。我的 Fsvideo 模型如下:
class Fsvideo < ActiveRecord::Base
attr_accessible :user, :video
belongs_to :user
mount_uploader :video, MyVideoUploader
上传者如下:
class MyVideoUploader < CarrierWave::Uploader::Base
storage :fog
def store_dir
"videos/#{model.user.id.to_s.underscore}"
end
end
问题在于,每当调用 store_dir 方法时,都会抛出 NoMethodError(undefined method 'user for nil:NilClass)。奇怪的是,当我更改 store_dire 方法以返回以下字符串时:
"videos/#{model.class}"
它工作正常,文件上传到S3存储空间没有错误。进入 rails 控制台并检查视频是否已成功安装,我看到了
Fsvideo.find(18).video.model.user.id
将返回我正在寻找的确切属性。
我的问题本质上是,为什么我可以通过控制台访问这个属性,而不是通过我的上传器类?