Flashメッセージで次のリクエストにデータを伝える
railsのredirect_toメソッドにflashを使うことで次のリクエストにデータを伝えることができる。(同じリクエスト内でもできるが後述)
redirect_to リダイレクト先のURL, notice: 'ここのデータを送れるよ!'
次のように2行で書いても、同じ。
flash[:notice] = 'ここのデータを送れるよ!'
redirect_to リダイレクト先のURL
redirect_toのオプションに渡せるflashのキーはデフォルトでは:noticeと:alertのみとなっている。
次のようにflashキーの値にオリジナルのデータをハッシュで渡すことでプチカスタマイズができる。
redirect_to リダイレクト先のURL, flash: {hogehoge: 'ここのデータを送れるよ!'}
#=> 次のリクエストではflash.hogehogeで参照できる
また、noticeとalertは以下のようにメソッドの形でデータを渡すこともできる。
flash.notice = 'ここのデータを送れるよ!'
flash.alert = 'ここのデータを送れるよ!'
redirect_toすると次のリクエストに移行するが、
同じリクエスト内にデータを伝えたいこともありますよね!(renderでエラーメッセージを表示するなど)
そんな時は
flash.now(:notice) = '今のリクエストが終わるまでデータを保持できるよ!'
flash.now(:alert) = '今のリクエストが終わるまでデータを保持できるよ!'
とすることで同リクエスト内でデータを参照できます。
flash.keep(:notice) = '次の次までデータを保持できるよ!'
flash.keep(:alert) = '次の次までデータを保持できるよ!'
flash.keepはredirectで送ったリクエストの次のリクエストまでデータを保持できます。
flashメッセージの表示期間(現在のリクエストor次回のリクエストorその先)によって上記を使い分けましょう。