要約
- validationが失敗したときのキャッシュのさせ方は
f.hidden_field :image_cache書くだけでいい - fog使ってs3に保存している場合でも
config.cache_storage = :fog書けばs3でこのキャッシュ処理やってくれる - carrierwaveの記事で結構正しくない情報が多い
validationが失敗したときのキャッシュのさせ方
carrierwave cacheでググると
# controller
model.image.cache!
# view
f.hidden_field :image_cache
のようにしろという記事が出てくるのですが、実はcache!は手作業でやる必要なくて、単純にviewの方の
f.hidden_field :image_cache
だけを書けば、validationに失敗したときだけ自動でimage_cacheに値が入ってくれます。
githubのreadmeに書いてあります。
https://github.com/carrierwaveuploader/carrierwave#making-uploads-work-across-form-redisplays
(cache!はreadmeでは触れられておらず、普通に使う分には利用者が呼ぶ必要はなさそうです)
さらに、fogを使っていても
# config/initializers/carrierwave.rb
config.cache_storage = :fog
していればs3上でこのキャッシュファイルが処理されるので、サーバを2台構成にしていてvalidation失敗したときにサーバAにキャッシュしていて、やり直しのリクエストがサーバBに行ったときにキャッシュファイルがなくてエラーになるということもありません。