フラッシュメッセージを表示させる
フラッシュメッセージとは
カスタマーが会員登録やログインなどの処理を行った時に、それが正しく処理されたのかをわかりやすくするために表示させるメッセージのこと。
書き方
flash[:success] = '登録が完了しました'
このように書くだけ。
具体的な使い方はこんな感じ↓
def create @user = User.new(user_params) if @user.save flash[:success] = '登録が完了しました' # success: '登録が完了しました' # flash.success = '登録が完了しました' # どの書き方でも意味は同じ redirect_to login_path else flash.now[:danger] = '登録に失敗しました' # ページをリダイレクトさせる時にrenderを使う時はflash.nowと書く # flash.now.danger = '登録に失敗しました'と書いても同じ意味 render 'new' end end
renderを使うとコントローラを経由せずにビューを表示するので、HTTPリクエストが送られず、1回とカウントされないため、次のページにいくともう一度メッセージが表示されてしまいます。
そのためflash.now
と書くとその問題が解消されます。
flashのあとのキー[:success]について
Bootstrapを使っている場合はキーにいれる文字を変えると、メッセージの色や背景色を変えることができます。
[:success]→緑
[:info]→青
[:warning]→黄
[:danger]→赤
↑を適用する場合はapplication_controller.rb
に一つ設定が必要です
add_flash_types :success, :info, :warning, :danger
Bootstrapを使っているとredirect_toとflashを1行で表示できる
Before
def create @user = User.new(user_params) if @user.save flash[:success] = '登録が完了しました' redirect_to login_path else flash.now[:danger] = '登録に失敗しました' render 'new' end end
After
def create @user = User.new(user_params) if @user.save flash[:success] = '登録が完了しました' redirect_to login_path, success: '登録が完了しました' else flash.now[:danger] = '登録に失敗しました' render 'new' end end