0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】flash[:alert]が更新してもページに残ってしまう時の対処法

Posted at

こんにちは。
基本的な内容で記事にするか迷ったんですが、まあ書きたいので書くことにしました。

flash[:alert]がページ更新しても消えず、もう一度更新したら消える場合

おそらくこの場合、あなたのコードが

flash[:alert]
render :new  

とかこんな感じになっていると思います。
まず flash[:alert] はフラッシュを「次のリクエストの時に表示する」※1
というコードです。
なのでリクエストを変えない render を使っている場合、手動でページ更新など「次のリクエストをした時」にエラーが表示されてしまいます。
ということはそもそも flash[:alert] というコードが redirect_to 等のリクエストを変えてからフラッシュを表示したい時用のコードということになりそうです。

じゃあrenderを使っているときはどうしたらいいかというと、専用のコードがあります。
flash.now というコードです。
これは「今回のリクエストでのみフラッシュが表示されるようにする」というコードです

flash.now[:alert]
render :new  

こういう組み合わせだと。renderのページには表示されて、次回の手動更新や別のリクエスト時にしっかり消えてくれます。

まあ細かいことを書きましたが、
flashはredirect_toとペアで

flash.nowはrenderとペア

とだけ覚えておけばよさそうな気がします。

もし間違いがあったら教えていただけると嬉しいです。
読んでくださってありがとうございました。

※1 
わかりやすくするために端折りましたがflash[:alert] は「次のリクエストでも使えるように値を保存する」仕組みです、なので現在のリクエスト中でも参照できてしまいます。
よってrenderでリクエストを更新していない状態でもalertが見え、次のリクエスト時も消えない。という挙動になってしまいます。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?