LoginSignup
2
1

More than 5 years have passed since last update.

railsでデータをcreateしたときにフラッシュメッセージを出現させる

Posted at

はじめに

スクリーンショット 2019-01-05 2.31.32.png
railsでデータを作成した時に↑のようなフラッシュメッセージを出したい時があると思います。    
今回はフラッシュメッセージを出す方法について話したいと思います。   
※また、今回cssはbootstrapのものを使っています

まずはコードから

articles_controller.rb

#〜省略〜

def create
  @article = Article.new(article_params)
  if @article.save
    redirect_to @article, flash: { notice: '記事の作成が作成されました' }
  else
    redirect_to new_article_path
  end
end

#〜省略〜

show.html.erb
<% if flash[:notice] %>
  <div class="alert alert-primary" role="alert">
    <%= notice %>
  </div>
<% end %>
<p>
  <strong>Title:</strong>
  <%= @article.title %>
</p>
<p>
  <strong>Content:</strong>
  <%= @article.content %>
</p>

<%= link_to '', edit_article_path(@article) %> |
<%= link_to 'Back', articles_path %>

解説

フラッシュメッセージを出現させるには2つの工程が必要です
1,flashを使ってメッセージを保管する(コントローラー側)
2,flashメッセージがあれば出現させる(ビュー側)

そもそもflashってなんやねん!

flashというのはrailsのメソッドでユーザーのセッションに一時的にハッシュのようにキーとバリューのような形で保存されるものです。

特徴としては、セッションは1度表示されると自動的に削除される点です。

1,flashを使ってメッセージを保管する

flashを使ってメッセージを保管する方法は2種類あります

またいずれの場合も notice をキー '記事の作成が作成されました' をバリューとしたセッションが保存されます

1つ目

, flash: { notice: '記事の作成が作成されました' }

最初のコードのようにredirect_toのあとに以下のように記述する方法。  

2つ目

flash[:notice] = '記事の作成が作成されました'

シンプルにflashを使ってメッセージを保存する方法  

この2つのいずれかの方法でセッションにメッセージを一時保存することができます。

2,flashメッセージがあれば出現させる

flashメッセージは flash[:キー名] とすることでビュー側で値を取得することができます。

これを使ってview側では以下のように記述することでflashメッセージを出現させています。

<% if flash[:notice] %>
  <div class="alert alert-primary" role="alert">
    <%= notice %>
  </div>
<% end %>

まとめ

以上2つの工程をふむことでflashメッセージはかなり簡単に作成することができます。  
とりあえず使ってみるのが大事です。

2
1
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
2
1