rails 技術ブログ

rails 技術ブログ

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

フラッシュメッセージを表示させる

フラッシュメッセージとは

カスタマーが会員登録やログインなどの処理を行った時に、それが正しく処理されたのかをわかりやすくするために表示させるメッセージのこと。

書き方

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