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 :アクション名