タイトルの通りです。
使用環境:
ruby:2.5.1
rails:5.2.2
検証
こんなコードを書きました。
blogs_controller.rb
def create
@blog = Blog.new(blog_params)
if @blog.save
redirect_to blogs_path
else
flash[:notice] = '投稿に失敗しました'
render :new
end
end
ブログを投稿し、バリデーションにひっかかると投稿に失敗しました
というメッセージを出します。
わざとバリデーションエラーを発火させる。
予定通り、flashメッセージが表示される。
ここで、画面にあるBack
をクリックしてみる。
フラッシュメッセージが出たままだ!
続いて、コードを以下のように変更します。
blogs_controller.rb
def create
@blog = Blog.new(blog_params)
if @blog.save
redirect_to blogs_path
else
flash.now[:notice] = '投稿に失敗しました'
render :new
end
end
同じくわざとバリデーションエラーを発火させ、Back
を押下。
するとflashメッセージが消えた!
しくみ
flash[:notice]にすると、次のアクションまで表示させる。
flash.now[:notice]にすると、次のアクションに移行した時点で消える。
render
は指定したviewsを呼び出すだけなので、アクションではないから気をつけるべし!
redirect_to
は次のアクションになるので、flash.nowだと表示すらしない。