こんにちは。
基本的な内容で記事にするか迷ったんですが、まあ書きたいので書くことにしました。
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が見え、次のリクエスト時も消えない。という挙動になってしまいます。