📝

Ruby on Railsのフラッシュメッセージを利用する

2023/06/22に公開

Railsには「ログインしました」などのかんたんなメッセージを画面に表示する、flashという機能があります。
これを利用することで、アクションで処理された内容を簡単にユーザーへお知らせすることができます。

フラッシュメッセージとエラーメッセージとの違いは?

正直どっちも似たような機能では?と思ってたのですが、作成のタイミング・目的が異なります。

フラッシュメッセージ

サーバーサイドのアクション内で処理が行われた時に、その結果をユーザーに知らせるために使用します。「ログアウトしました」「投稿されました」「削除されました」などのメッセージが主な例です。

エラーメッセージ

新規作成や編集などの際、バリデーションににひっかかってエラーが発生したことを知らせるために使用します。既定のメッセージがバリデーションヘルパーに設定されており、errors.full_messagesを使って表示することができます。

flashの特徴

  1. 「アクション->リダイレクト->アクション」の処理が済むと削除される
  2. ブラウザのクッキーを無効にしている場合は使用できない
    という特徴があります。
    1の特徴があるおかげで、「新規投稿が保存される>リダイレクト>遷移先で「保存しました」等のメッセージを表示」という機能を簡単に実装することができます。

flashを使ってみる

それでは、フラッシュメッセージを設定してみます。
記述方法は下記の通りです。

flash[:キー名] = "表示させたいメッセージ"
# 例)
flash[:notice] = "お知らせです"
flash[:alert] = "警告です"

キー名は主に「notice」と「alert」を使用し、noticeは何かをお知らせしたい場合、alertは何かを警告したい場合という風に使い分けます。

実装例

新規投稿が保存される>リダイレクト>「投稿しました」を表示

# コントローラー
def create
  @post = Post.new(post_params)
  if @post.save
    flash[:notice] = '投稿しました'
    redirect_to root_path
  else
    render :new
  end
end
# 遷移先のビュー
# flash[:notice]があるかないかで表示を条件分岐してます。
<% if flash[:notice] %>
  <div class="alert alert-success"><%= notice %></div>
<% end %>

これで投稿に成功した場合は以下のようなメッセージが表示されます。

以上がflashの簡単な使い方です。今回はベーシックな書き方にしましたが、簡略化された書き方なんかもあります。また、flash.nowというちょっと違った使い方ができるものもありますので下記の参考からどうぞ!

参考

https://railsdoc.com/page/flash

https://qiita.com/nakachan1994/items/a4c15e960ae7d941abce

https://techtechmedia.com/flash-flashnew-difference/

Discussion