rails 技術ブログ

rails 技術ブログ

勉強したことをアウトプットしていきます

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