要約
- 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に行ったときにキャッシュファイルがなくてエラーになるということもありません。