解決方法を見つけるまでに8時間位かかったので、ここで共有します。
#問題
unscopedなモデルに対してcarrierwaveを使ってデータをアップロードしようとすると、こんなエラーが出ます。
Couldn't find [class name] with id= ...(省略)
#解決方法
find_previous_model_for_#{column}
をoverrideします。
今回の例ではJob
クラスにfile
をアップロードしています。
app/models/job.rb
mount_uploader :file, :FileUploader
default_scope { where(opened: true).order(:id.desc) }
def find_previous_model_for_file
self.class.unscoped.find(to_key.first)
end
carrerwaveはfind_previous_model_for_#{column}
でself.class.find(to_key.first)
を呼んでいますが、そこをself.class.unscoped.find(to_key.first)
にoverrideします。
以上です。
クラスではなく、carrierwaveをoverriedeする方法が分かる方がいらっしゃったら、教えて頂けると嬉しいです。
#参考
https://github.com/carrierwaveuploader/carrierwave/issues/696