Rails 一日一つメソッド (Day23) flashメソッド
Rails 一日一つメソッド (Day23) flash
flashとは
- flashメソッドは、ユーザーに対してページ移動した時に簡単なメッセージを一時的に表紙させる機能で、ユーザーにどんな作業の成功または失敗、エラーなどを表紙する。
- flashメッセージはControllerで設定され、次のRequestまで維持される。
flashの書き方
# Controller
flash[:キー名] = "表紙させたいメッセージ"
# View
<%= flash[:キー名] %>
noticeとalertオプション
<%= notice %>
<%= alert %>
notice | 何かの通知 |
alert | 警告のメッセージ |
例)ユーザー登録
class UsersController < ApplicationController
def create
@user = User.new(user_param)
if @user.save
redirect_to user_path(@user), notice: "ユーザーが登録されました!"
else
flash.now[:alert] = @user.errors.full_message.to_sentence
render 'new', status: :unprocesable_entity
end
end
end
content_tagメソッド
<% flash.each do |key, message| %>
<%= content_tag :div, message, class: key %>
<% end %>
- flashにある各メッセージを反復して divタグに囲んで、キーに該当するClassに使う。
redirect_to書き方
# Controller
if user.save
redirect_to root_path, notice: "メッセージを表紙する"
else
end
render書き方
# Controller
if user.save
redirect_to root_path, notice: "Userが登録されました"
else
flash[:alert] = "入力してください"
render :new
end
上のコードでUser登録に成功した場合、user.saveは trueを変換する。この時、redirect_to root_path, notice: "Userが登録されました" を通してUserをroot_path に redirectし flashメッセージを表紙する。
失敗した場合、user.saveが flaseを変換し、flash[:alert] = "入力してください"を通じて alertメッセージの flashメッセージを設定し、 render :newで新しいUserFormをrenderingする。
flashとflash.nowの違い
flash | redirection時に使われる。flashに設定されたメッセージは現在アクションと次のアクションの間に有効する。 |
flash.now | 現在のrequestだけでメッセージを表紙する場合に使われる。 renderを使って同じページをrenderingする時に適当で flash.nowに設定されたメッセージは現在パージだけ表紙される。 |
flash.keepの書き方
flash.keepはメッセージをもう一度維持するために使われる。flash.keepを使うことで、現在設定された flashメッセージを "保存"し次の要請でも使うことができる。
if user.save
redirect_to root_path
flash.keep(:notice)
else
end
flash.discardの書き方
# Controller
if user.save
redirect_to root_path, notice: "User登録に成功しました!"
else
flash[:alert] = "入力してください!"
flash.discard(:alert)
render :new
end
:newアクションをrenderingする時、:alertメッセージを使った後、削除する。
keepは、特定の flashメッセージを次のrequestまで維持する時。
discardは、現在のrequestでflashメッセージを使った後、すぐ削除する時に使う。