LoginSignup
5
3

More than 3 years have passed since last update.

[Rails]flashとflash.nowの違いについて![初心者]

Last updated at Posted at 2020-11-19

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