タイマーをセットする。

CSVファイルをリスト表示しているページは、ほとんどのアクションがajaxな更新。ページ全体を書き換えるタイミングってあまりない。そうすると気になってくるのがフラッシュメッセージだ。最初に表示されたメッセージが、いつまでも表示されたままになってしまう...。確認操作が不要なメッセージについては、一定時間経過後に自動的に消える方がいい。そう思って、Railsにもタイマーってあるのかな、と調べてみると、ちゃんとあるんですね。periodically_call_remoteで以下のようにやってみた。

app/views/layouts/csvs.rhtml
ビュー(レイアウト)
  • periodically_call_remoteを以下のように設定すると、10秒ごとに、check_flash_timerアクションを呼び出すようになる。ちなみに:frequency=>10はデフォルト設定になっているようなので、省略してOK。
...(途中省略)...
<body>
<%= periodically_call_remote :url=>{:action=>'check_flash_timer'}, 
                             :frequency=>10 %>
<%= render :partial=>"layouts/menu2" %>
<%= render :partial=>"layouts/flash" %><%# "layouts/flash"は、div id="flash"タグで囲まれている。 %>

<%= yield  %>

</body>
...(途中省略)...
app/controllers/csvs_controller.rb
コントローラー
  • 以下のアクションが10秒ごとに呼び出される。瞬時に消えてしまうと、何が起こったのか不安になるので、ビジュアルエフェクトを利用してみた。
  • render :update do |p|...endブロック内には、複数のajax処理を記述することができる。
  • render :updateブロック内の処理は、10秒ごとに繰り返される。エフェクトのFadeとDropOutでは一度消えてしまうと、再表示されることはなかった。 その他のエフェクトでは、再表示されエフェクトが繰り返された。
...(途中省略)...
  def check_flash_timer
    render :update do |p|
      p.visual_effect(:DropOut, 'flash', :duration => 2)
    end
  end
...(途中省略)...

ビジュアルエフェクトについては、以下のページが大変参考になりました。


以上で、10秒後に、ビジュアルエフェクトと共に、フラッシュメッセージは消え去る。

      • しかし、どうも完全には使いこなせていなくて、:Fadeと:DropOut以外は、メッセージの表示位置がズレた後、エフェクトが始まる...。レイアウトに対するエフェクトだと、ズレてしまうのかもしれない。回避できるのだろうか?