2016-12-03 14 views
0

キャリアウェーブで画像をアップロードするのにcarrierwaveを使用しています。これは私のuploaderクラスです。NoMethodError(nil:NilClassの未定義のメソッドID):CarrierWaveモデル

class ProfilePictureUploader < CarrierWave::Uploader::Base 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 
end 

私は私のmodelmount_uploader :avatar , ProfilePictureUploaderを使用してないです。

当然modelインスタンス:代わりに、私は私のモデルに

uploader = ProfilePictureUploader.new 
uploader.store!(file) 
self.image = uploader.url 
self.save 

しかし、これは私に

NoMethodError(NilClass未定義のメソッドはnilのための `のIDを」)というエラーを与えているが、これを使用しますProfilePictureUploaderには存在しません。したがってstore_dirメソッドはmodel.idにアクセスできません。どのように私はこの流れで同様のディレクトリ構造を得ることができます。

これはthis problemの複製ではありません。私の場合、の属性はuploaderではありません。

+0

[Carrierwave:ファイル名/ストアの\ _dirでファイルハッシュとモデルID]の可能な重複(http://stackoverflow.com/質問/ 18460686/carrierwave-file-hash-and-model-id-in-filename-store-dir) –

+0

これはこの複製ではありませんhttp://stackoverflow.com/questions/18460686/carrierwave-file-hash- and-model-id-in-filename-store-dir。私にとっては、アップローダーのモデル属性は利用できません。 – raj

+0

はい、そうです。 –

答えて

0

私はあなたが適切にあなたのモデルインスタンスを使用して、アップローダを初期化すべきだと思う:

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

ねえ。ありがとう。それはうまくいった。 '' mounted_as''属性の略語を教えてください。これに関するすべてのドキュメント? – raj

+0

通常、モデルの列の名前です。例: 'mount_uploader:avatar、ProfilePictureUploader'ここに:アバターはマウントされています。詳細https://github.com/carrierwaveuploader/carrierwave/blob/c45699c318ca895f89fa3304204e48b5f1c411f1/lib/carrierwave/uploader/mountable.rb –

関連する問題