Flashとは
画面に出てくる以下のメッセージたちのこと
- 「ログインできました」
- 「ログインに失敗しました」
- 「保存できました」
- 「保存に失敗しました」
↓ の記事の内容を使って進めていく
保存された場合にFlash表示する
app/controller/article_controller.rbに以下のコードを書く
def create
@article = Article.new(article_params)
if @article.save
redirect_to article_path(@article),
notice: '保存できました'
else
render :new
end
endnotice: ‘保存できました’
→ 記事の保存ができたとき、「保存できました」というメッセージを表示させる
app/views/layouts/application.html.erbのheader下に以下のコードを書く
</header>
<% if flash.present? %>
<div class="flash">
<% flash.each do |key, value| %>
<div class="<%= key %>"><%= value %></div>
<% end %>
</div>
<% end %>
<%= yield %>共通レイアウトのheaderの下に表示されるようになる
if flash.present?
ruby
<% if flash.present? %>if flash.present? → 「もしflashが存在するなら」
.present? →nilじゃなければtureになる(実行される)
flash.each do |key, value|
ruby
<% flash.each do |key, value| %>
<div class="<%= key %>"><%= value %></div>
<% end %> flash.each do |key, value|
flashは配列(Hash)- 配列を
.each doするとき、key, valueを取得できる
- flashは「
notice:」と「error:」の2種類のkeyがある - article_controller.rbで「
notice:」を指定しているので、keyにはnoticeが入る valueには「保存しました」のメッセージが入る
key(notice:)とvalue(メッセージ)
ruby
<div class="<%= key %>"><%= value %></div>↑のrubyは、↓のhtmlに書き換えられる
HTML
<div class="notice">保存できました</div>保存されなかった場合もFlash表示する
保存された場合とは別で、保存されなかった場合のFlashも設定する
app/controller/article_controller.rbのelse以降に、追記する
def create
@article = Article.new(article_params)
if @article.save
redirect_to article_path(@article),
notice: '保存できました'
else
flash.now[:error] = '保存に失敗しました'
render :new
end
endFlashの表示方法が異なる
- 保存できたとき
redirect_to
→ ページの遷移先で表示させる
→ 遷移先のhtmlにflashを表示する記載が必要 - 保存できなかったとき
render :new
→ 今のviewに表示させる
#DAY12
