fc2ブログ

2023.04 «  - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - - - » 2023.06
TOP > CATEGORY > flash

TOP

rails の flash を使ってみる・その3【flash.keep と flash.discard】 

2007年12月21日 ()
flash は今の画面(アクション)と次の画面(アクション)まで有効だ、ということでしたが、次の次の画面(アクション)まで有効にする手段があります。

それは、flash.keep

うーん、分かりやすいネーミングですね。

flash.keep とは対照的に、次の画面(アクション)まで有効だった flash を、今の画面(アクション)限りで消し去る、というメソッドもあります。

それは、flash.discard

例を見てみますか。

app/controllers/flash_example_controller.rb

class FlashExampleController < ApplicationController
  layout 'my_layout'

  def page1
    flash[:msg1] = 'カンパネルラ'
    flash.now[:msg2] = 'しのざき美知'

    flash[:msg3] = '日焼けサロン'
    flash.now[:msg4] = '金のエンゼル'

    flash.discard(:msg1) # msg1 は、今回の画面は生きる。次の画面では消えてしまう。つまり、flash.now っぽくなる。
    flash.discard(:msg2) # msg2 も、今回の画面は生きる。次の画面では消えてしまう。つまり、flash.now のままの動作をする。
  end

  def page2
    flash.keep(:msg3) # msg3 は、今回の画面限りで消えるはずだったが、flash.keep されたので、次の画面も生きる。
  end

  def page3
  end
end



app/views/layouts/my_layout.rhtml

<%= flash[:msg1] if flash[:msg1] %>
<%= flash[:msg2] if flash[:msg2] %>
<%= flash[:msg3] if flash[:msg3] %>
<%= flash[:msg4] if flash[:msg4] %>

<%= 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
<%= link_to('page3へのリンク', :action => 'page3') %>



app/views/flash_example/page3.rhtml

this is page 3





そして、各画面がどういう風に表示されるかというと、

http://localhost:3000/flash_example/page1

カンパネルラ しのざき美知 日焼けサロン 金のエンゼル this is page 1 page2へのリンク


flash の msg1~4 まで勢揃いです。


http://localhost:3000/flash_example/page2

日焼けサロン this is page 2 page3へのリンク


msg3 だけになりました。


http://localhost:3000/flash_example/page2

日焼けサロン this is page 3


msg3 はまだ健在です。

となります。しかしまあ、何に flash を使うか、というのはあなた次第です!!ウマイ使い方、考えてみてください!

【広告】

スポンサーサイト



[2007.12.21(Fri) 01:51] flashTrackback(0) | Comments(0) 見る▼
↑TOPへ

rails の flash を使ってみる・その2【flash.now】 

2007年12月15日 ()
前回、flash は、次の画面までは使える、と書きましたが、実は自分の画面でしか使えない、つまり次の画面では消えてしまう flash 機能があります。

その名も 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 の違いでした。


【広告】

[2007.12.15(Sat) 17:27] flashTrackback(0) | Comments(0) 見る▼
↑TOPへ

rails の flash を使ってみる・その1【rails の flashの基本】 

2007年12月12日 ()
といっても、あのグリグリ動く絵が盛りだくさんの flash ではありません。

rails の flash 機能でして、一言で言うと、次のページまでは保持されている変数、というカンジ。次の次のページでは、消えてしまいます。セッション変数の特殊ケースともいえましょうね。

例を見ましょう。

page1 にアクセスすると page2 にリダイレクトするようなコントローラです。ただ、リダイレクトする前に、flash にメッセージを入れておきます。
app/controllers/flash_example_controller.rb

class FlashExampleController < ApplicationController
  layout 'my_layout'

  def page1
    flash[:msg1] = '股引すなわちステテコ'
    redirect_to :action => 'page2'
  end

  def page2
  end

end



そして、画面表示側のファイルを作ります。

app/views/flash_example/page2.rhtml

<% if flash[:msg1] -%>
  <%= flash[:msg1] %>
<% end -%>
this is page 2




はい、できた。では、

http://localhost:3000/flash_example/page1



にアクセスしましょう。

股引すなわちステテコ this is page 2



が表示されたでしょうか。

コントローラの page1 で設定した値を、リダイレクト先の page2 でも使える、という訳でした。

【広告】

[2007.12.12(Wed) 21:55] flashTrackback(0) | Comments(0) 見る▼
↑TOPへ

TOP