2012-05-01 12 views
1

私は、Ruby on Railsで書かれたWebアプリケーションのための簡単な通知システムをセットアップしたいと思います。私のウェブサイトはシンプルなオークションサイトですが、各オークションには2段階があります。入札可能な5日間の「最小入札なし」段階と、前回入札者の入札者の上位10%のみが入札できる3日間の「最低入札単価」段階ステージは入札できます。Ruby on Railsで通知の「監視」を設定するにはどうすればよいですか?

オークションが第1段階から第2段階に移行したときにユーザーに通知したいと考えています。これを行う最善の方法は何ですか?

私は2つの設計オプションを考えてきました

  • 私はRoRのは、これを持っているかわからない、と私は何千人ものユーザーを持つことになり、システムを構築したいので、これは効率的なシステム(あるかどうか大規模なものであろうとなかろうと、それは無関係なものであろうと、これは高品質でスケーラブルなRoRを書くことを学ぶための一種のプロジェクトですが)基本的にオークションに入札するとオブザーバーになりますオークションで何らかの種類のそれから、どういうわけか5日目に、すべてのリスナーに通知されます。私はRoRでどのようにトリガーが発生するのかわかりません(「作成から5日後にトリガーする」などと言っていますか?)。まとめると、Observerパターンを使用したいと思います。

    私にとって重要な問題は、一定期間後にどのようにトリガーするかを調べることです。それを行う最良の方法は、各オークションが「オークション状態」と呼ばれるいくつかのセット状態変数を持つことです。一定の期間が経過すると、それは移行し、その時点でオークションのすべてのオブザーバーに通知が届きます。

  • 毎日何らかの設定時刻に毎日実行されるレーキタスクがあります。それは各オークションを通過し、6日目にオークションが行われた場合、そのオークションのオブザーバーに通知されます。これは非常に悪い方法のように思える - 私は国家的なオークションを持つ考えが好きです。

考えられますか?

ありがとうございます! リンゴ

答えて

0

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.htmlは、https://github.com/bvandenbos/resque-schedulerを見てください標準のアクティブなレコードのコールバックを使用することができ、resqueは、バックグラウンド処理を作成するのRedisのキューを持つための逸品です。このgem resque-schedulerでは、タスク/ジョブをいつ実行するかを指定できます。

例えば、モデルでは、after_createを使用して入札状態を変更するタスクをスケジュールします。

after_create :shedule_state_change 

    private 
    def record_signup 
     Resque.enqueue_in(5.days, ChangeState) 
    end 

そして、あなたはそのタスク内のその入札のために、すべての入札者に通知したり、そのためのオブザーバーを作成することができます。

関連する問題