1

私は次の構造を持っています: Fsvideo オブジェクトはユーザーに属し、外部キーの関係が確立されます。ビデオ オブジェクトは 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 に答える