私は次の構造を持っています: 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
私が探している正確なプロパティを返します。
私の質問は基本的に、コンソールからこのプロパティにアクセスできるのに、アップローダ クラスからはアクセスできないのはなぜですか?