1

我的结构如下:一个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

将返回我正在寻找的确切属性。

我的问题本质上是,为什么我可以通过控制台访问这个属性,而不是通过我的上传器类?

4

1 回答 1

0

试试 "videos/#{model.user_id.to_s.underscore}" 视频记录应该有 user_id 作为它的属性。

于 2012-07-20T22:38:01.633 回答