LoginSignup
3
7

More than 3 years have passed since last update.

【Rails】 フラッシュメッセージ使い分け

Last updated at Posted at 2021-02-19

はじめに

お恥ずかしながら、私は最近までフラッシュメッセージってflash[:notice] = ⚪︎⚪︎と書いておけばいいんだろうくらいの認識しかありませんでした。ポートフォリオ作成時にフラッシュメッセージの使い分けの方法があることを知り、少し理解を深めることができたので、自身の備忘録として残しておきたいと思います。

開発環境

ruby 2.6.3
Rails 5.2.4.4

フラッシュメッセージって何?

何かの処理を行った後に画面に表示されるメッセージのことを指します。
例) ● ログイン時
    「ログインに成功しました」
   ● 記事の投稿時
    「記事の投稿に成功しました」

見本

スクリーンショット 2021-02-20 1.14.25.png

フラッシュメッセージの種類

● flash

次のリクエストまで表示させることができる。
= redirect_toの際に使用する。
※render時に使用すると次のリクエスト時までメッセージが画面に表示され続けてしまうので、不適切になります。

● flash.now

現在のリクエストまでしか表示できない。
= renderの際に使用する。


● notice

通知を出す時。主に成功した時のメッセージなど。

● alert

警告の通知を出す時。何かの動作に失敗時など。

コントローラー

今回は、投稿した際の保存成功時と失敗時にメッセージが表示されるようにしています。

books_contoroller.rb

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にもフラッシュメッセージが表示されるように記述を加えます。
※フラッシュメッセージを表示させるタイミングは何度もあるかと思いますので、部分テンプレートに書き出し、呼び出す形にしています。

books/index.html.erb
<%= render 'layout/flash' %>

<% @books.each do |book| %>
 <%= book.user.name %>
 <%= book.title %>
 <%= book.content %>
<% end %>

layout/_flash.html.erb
<% if notice %>
 <%= notice %>
<% elsif alert %>
 <%= alert %>
<% end %>

終わり

今回は以上になります。
私自身もプログラミング初心者ですが、同じ様な立場の方に少しでも参考になれば幸いです。
また、もし内容に誤りなどがございましたら、ご指摘いただけますと幸いです。

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7