flash.now
class SessionsController < ApplicationController def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) else flash[:danger] = 'Invalid email/password combination' render 'new' end end end
エラーメッセージ等を1回だけ表示させたいときにflash
を使用することがあります。
しかし、↑のコードだとエラーメッセージが1度で消えません。
【なぜか?】
その後にrender
でnewページへ返していますが、renderはビューに直接的に返しているだけでHTTPリクエスト(GETとかPOSTとか)を送信しているわけではないため、1回とカウントされないことが原因
【renderを使ってflashメッセージを表示したい時は】
flash.now
にするとレンダリングが終わっているページで特別にflashメッセージを表示してくれます。
(その後HTTPリクエストが送信されると消える)
class SessionsController < ApplicationController def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) else flash.now[:danger] = 'Invalid email/password combination' render 'new' end end end