⚡操作結果の表示で悩んでませんか?
Railsで「処理が成功しました!」とか「エラーが発生しました…」みたいなメッセージを表示したいとき、どうしていますか?
flash
を使えば、スマートにリダイレクト後のメッセージを管理できます。
この記事では、flash
の基本から flash.now
との違い、活用方法まで解説します!
🔥 flashを使えばメッセージ管理が爆速に!
flash
を使うと、リダイレクト後にメッセージを表示できます。例えば、こんな感じ👇
✅ flashを使ったシンプルな成功メッセージ
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
flash[:notice] = "ユーザー登録が完了しました!"
redirect_to @user
else
flash[:alert] = "登録に失敗しました…"
render :new
end
end
end
このコードでは、ユーザー登録が成功すれば flash[:notice]
にメッセージをセットし、失敗したら flash[:alert]
にエラーメッセージをセットしています。
redirect_to
すると、次のページでメッセージが表示されるのがポイントです。
✅ ビューでの表示方法
flash
のメッセージは application.html.erb
などのレイアウトファイルに書いておくと便利!
<% flash.each do |key, message| %>
<div class="flash <%= key %>">
<%= message %>
</div>
<% end %>
こうしておくと、どのページでも flash
のメッセージが出せるようになります!
🤔 flash.nowとは?flashとの違いを理解しよう
flash
には flash.now
という似たような機能があります。
違いを簡単に説明すると…
メッセージの持続時間
flash
は次のリクエストまでメッセージが残るflash.now
は即時表示され、リダイレクトすると消える
よく使うケース
flash
はリダイレクト時のメッセージに使うflash.now
はrender
するときに使う
例えば、さっきのユーザー登録の例で、バリデーションエラー時に flash.now
を使うとこんな感じ👇
✅ flash.nowを使ったエラーメッセージの表示
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
flash[:notice] = "ユーザー登録が完了しました!"
redirect_to @user
else
flash.now[:alert] = "登録に失敗しました…"
render :new
end
end
end
この違い、わかりましたか?
flash[:alert]
だと、エラーが出たあと別のページに遷移してもメッセージが残るflash.now[:alert]
だと、ページ遷移せずにすぐ消える
flash.now
は renderする場合に使う のがポイントです!
🚀 実際に導入してみたら便利すぎた件
実際にプロジェクトで flash
を導入したら、こんなメリットがありました!
✅ 操作結果やエラーメッセージがスマートに表示できる
✅ シンプルなので、コードの保守性が保たれる
✅ ユーザー体験が向上する
例えば、ログインや登録処理で「成功!」「失敗…」のメッセージをサクッと表示できるので、
ユーザーにとって分かりやすいUI を作れるのが強みですね。
🎯 まとめ
flash
はリダイレクト後のメッセージに使うflash.now
はrender
で使う- レイアウトファイルに
flash.each
を書いておくと便利
これであなたも flash
マスター!
Railsの開発で、ぜひ flash
を活用してみてください🚀