はじめに
お恥ずかしながら、私は最近までフラッシュメッセージってflash[:notice] = ⚪︎⚪︎と書いておけばいいんだろうくらいの認識しかありませんでした。ポートフォリオ作成時にフラッシュメッセージの使い分けの方法があることを知り、少し理解を深めることができたので、自身の備忘録として残しておきたいと思います。
開発環境
ruby 2.6.3
Rails 5.2.4.4
フラッシュメッセージって何?
何かの処理を行った後に画面に表示されるメッセージのことを指します。
例) ● ログイン時
「ログインに成功しました」
● 記事の投稿時
「記事の投稿に成功しました」
見本
フラッシュメッセージの種類
####● flash
次のリクエストまで表示させることができる。
= redirect_toの際に使用する。
※render時に使用すると次のリクエスト時までメッセージが画面に表示され続けてしまうので、不適切になります。
####● flash.now
現在のリクエストまでしか表示できない。
= renderの際に使用する。
####● notice
通知を出す時。主に成功した時のメッセージなど。
####● alert
警告の通知を出す時。何かの動作に失敗時など。
コントローラー
今回は、投稿した際の保存成功時と失敗時にメッセージが表示されるようにしています。
def create
@book = Book.new(book_params)
@book.user_id = current_user.id
if @book.save
redirect_to books_path, notice: = "投稿に成功しました"
else
flash.now[:alert] = "投稿に失敗しました"
render :new
end
end
# 2行に分けて記述することも可能
# redirect_to books_path
# flash[:notice] = "投稿に成功しました"
ビュー
viewにもフラッシュメッセージが表示されるように記述を加えます。
※フラッシュメッセージを表示させるタイミングは何度もあるかと思いますので、部分テンプレートに書き出し、呼び出す形にしています。
<%= render 'layout/flash' %>
<% @books.each do |book| %>
<%= book.user.name %>
<%= book.title %>
<%= book.content %>
<% end %>
<% if notice %>
<%= notice %>
<% elsif alert %>
<%= alert %>
<% end %>
終わり
今回は以上になります。
私自身もプログラミング初心者ですが、同じ様な立場の方に少しでも参考になれば幸いです。
また、もし内容に誤りなどがございましたら、ご指摘いただけますと幸いです。