5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

carrierwaveでvalidation失敗したときの正しい書き方

Last updated at Posted at 2019-09-09

要約

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

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?