これは、Devise をセットアップしたときに表示されるような役立つメッセージ (v. 2.2.3 以降) から始まったと言うことから始めましょう。
Ensure you have flash messages in app/views/layouts/application.html.erb
For example:
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
コントローラーからビューに情報を取得するには、少なくとも 3 つの方法があります。セッションに物を入れたり、フラッシュに入れたり、コントローラーにインスタンス変数を設定したりできます。フラッシュとセッションの両方がビュー内の裸の変数でアクセスされる例が見られます。これにより、衝突の可能性が開かれます。たとえば、次のようなコントローラーを使用できます。
class PerverseController < ApplicationController
def index
@msg = 'Message 1'
session[:msg] = 'Message 2'
# Note - this is where a real concern comes in, the previous page could
# have done anything! Though here I use flash.now to illustrate the point.
flash.now[:msg] = 'Message 3'
end
次に、ビューに次のものがあったとします。
<%= msg %>
これら 3 つの値のいずれかが参照される可能性があります。実際、ビュー内の上記のようなコードは (Rails 3.2 では) エラーです。実際には「@」または「flash」または「session」を明示的に使用する必要があります。
これに関する明確なドキュメントが見つかりません。書籍やチュートリアルでは、ほとんどがフラッシュとセッションを後付けとして参照しているため、将来のバージョンで変更される可能性があると思います. しかし、参照へのポインタと、コードをできるだけ明確/簡潔に保ちながら、将来の破損を避けるために何をすべきかの提案を見たいと思っています.
そして今のところ、Devise と適切に統合できるようにしたいと思います。