rails の flash を使ってみる・その2【flash.now】
前回、flash は、次の画面までは使える、と書きましたが、実は自分の画面でしか使えない、つまり次の画面では消えてしまう flash 機能があります。
その名も flash.now
値を代入するときに、flash.now[:honyarara] と .now が余計に付きます。
値を参照するときには、flash と同じで flash[:honyarara] と書きます。
例をみましょうか。
↓で、flash と flash.now の 2 種類を用意します。
app/controllers/flash_example_controller.rb
↓は、画面表示用です。flash[:msg1] や flash[:msg2] があったら必ず表示するようにレイアウトファイルを使います。
app/views/layouts/my_layout.rhtml
ちなみにレイアウトファイルって何?っていう方は、こちらのエントリーを参考にしてみてください。
app/views/flash_example/page1.rhtml
app/views/flash_example/page2.rhtml
これで準備完了。
そして、
にアクセスしますと、
が表示されました。flash も flash.now も表示されたっていう訳です。
そしてこの画面のpage2へのリンクをクリックすると、
に画面が遷移します。この画面には、
が表示されます。flash は表示されるけど、flash.now は表示されない、って訳でした。
つまり flash は次の画面(アクション)まで引き継がれるが、flash.now は自分の画面(アクション)まででおしまいです。
ちなみに、前回のエントリの繰り返しですが、flash は次の画面(アクション)までは引き継がれますが、次の次の画面(アクション)では引き継がれません。
以上、flash と flash.now の違いでした。
【広告】
その名も flash.now
値を代入するときに、flash.now[:honyarara] と .now が余計に付きます。
値を参照するときには、flash と同じで flash[:honyarara] と書きます。
例をみましょうか。
↓で、flash と flash.now の 2 種類を用意します。
app/controllers/flash_example_controller.rb
class FlashExampleController < ApplicationController
layout 'my_layout'
def page1
flash[:msg1] = 'カンパネルラ'
flash.now[:msg2] = 'しのざき美知'
end
def page2
end
end
↓は、画面表示用です。flash[:msg1] や flash[:msg2] があったら必ず表示するようにレイアウトファイルを使います。
app/views/layouts/my_layout.rhtml
<% if flash[:msg1] -%>
<%= flash[:msg1] %>
<% end -%>
<% if flash[:msg2] -%>
<%= flash[:msg2] %>
<% end -%>
<%= yield %>
ちなみにレイアウトファイルって何?っていう方は、こちらのエントリーを参考にしてみてください。
app/views/flash_example/page1.rhtml
this is page 1
<%= link_to('page2へのリンク', :action => 'page2') %>
app/views/flash_example/page2.rhtml
this is page 2
これで準備完了。
そして、
http://localhost:3000/flash_example/page1
にアクセスしますと、
カンパネルラ しのざき美知 this is page 1 page2へのリンク
が表示されました。flash も flash.now も表示されたっていう訳です。
そしてこの画面のpage2へのリンクをクリックすると、
http://localhost:3000/flash_example/page2
に画面が遷移します。この画面には、
カンパネルラ this is page 2
が表示されます。flash は表示されるけど、flash.now は表示されない、って訳でした。
つまり flash は次の画面(アクション)まで引き継がれるが、flash.now は自分の画面(アクション)まででおしまいです。
ちなみに、前回のエントリの繰り返しですが、flash は次の画面(アクション)までは引き継がれますが、次の次の画面(アクション)では引き継がれません。
以上、flash と flash.now の違いでした。
【広告】