#flash[:notice]とは
主にredirect_to
メソッドとセットで使用。
次のアクションまでエラーメッセージが表示されたままになる。
なお、redirect_to
メソッドとともに使用する場合、引数にnotice
というキーを渡すだけで、フラッシュメッセージを表示することができます。
#flash.now[:notice]とは
主にrender
とセットで使用。
次のアクションに移行した時点で、エラーメッセージが消えてしまう。
#使用上の注意点
render
とともにflash[:notice]
を使用してしまうと、画面遷移後のページ(renderの次のアクションで表示するページ)にも、エラーメッセージが残ったままになってしまう。
逆に、redirect_to
とセットでflash.now[:notice]
を使っても、アクションを経由しているので、エラーメッセージが表示されない。
#使用例
controllers/books.rb
class BooksController < ApplicationController
def create
@book = Book.new(book_params)
@book.user_id = current_user.id
if @book.save
redirect_to books_path, notice: '投稿成功!!' #notice:で引数を渡しているため、flashの記載は省略
else
flash.now[:alert] = "投稿失敗!!"
render 'new'
end
end
end
#まとめ
以下のように使い分けるべし!!!!
redirect_to パス名, notice: "エラーメッセージ"
flash.now[:alert] = "エラーメッセージ"
render :アクション名