【问题标题】:How to setup a "watch" for notifications in Ruby on Rails?如何在 Ruby on Rails 中为通知设置“监视”?
【发布时间】:2012-05-01 16:57:05
【问题描述】:

我想为我的 Web 应用程序设置一个简单的通知系统,它是用 Ruby on Rails 编写的。我的网站是一个简单的拍卖网站,但每次拍卖都有 2 个阶段:一个 5 天的“无最低出价”阶段,任何人都可以出价;一个 3 天的“最低出价 1 美元”阶段,只有前 10% 的投标人阶段可以出价。

我想在拍卖从第一阶段进入第二阶段时通知我的用户。最好的方法是什么?

我想到了两种设计方案:

  • 我不知道 RoR 有这个,以及这是否是一个高效的系统(因为我想建立一个系统,让成千上万的用户参与数百次拍卖 - 是否有那么大无关紧要,这个对我来说,这是一个学习编写高质量、可扩展的 RoR 的附带项目)但基本上,当用户在拍卖中出价时,他们会成为拍卖中的某种观察者。然后,不知何故,在第 5 天的时候,所有的听众都会收到通知。我不知道该触发器是如何在 RoR 中发生的(有没有办法说“在创建后 5 天后触发”或类似的事情?)。总而言之,我想使用观察者模式。

    对我来说,关键问题是试图弄清楚如何在一段时间后触发。我认为,最好的方法是让每次拍卖都有一些设置状态变量,称为“拍卖状态”。一段时间后,这种情况会发生转变,届时拍卖中的每个观察者都会收到通知。

  • 每天都有一个 rake 任务在每天的某个固定时间运行。它通过每次拍卖,如果在第 6 天有任何拍卖,则通知该拍卖的观察者。这似乎是一种非常糟糕的方式 - 我喜欢进行有状态拍卖的想法。

想法?

谢谢! 林哥

【问题讨论】:

    标签: ruby-on-rails ruby design-patterns


    【解决方案1】:

    您可以查看https://github.com/pluginaweek/state_machine,特别是转换回调。或者你也可以使用标准的活动记录回调http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

    【讨论】:

      【解决方案2】:

      看看https://github.com/bvandenbos/resque-scheduler,如果你还没有听说过,resque 是一个用于创建后台处理的 gem,在 redis 中有队列。这个 gem resque-scheduler,让你指定何时运行任务/作业。

      例如,在您的模型中,您将有一个 after_create 来安排更改投标状态的任务。

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

      然后您可以在该任务中通知该投标的所有投标人或为其创建一个观察者。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        • 1970-01-01
        • 1970-01-01
        • 2012-12-10
        • 2011-11-30
        • 1970-01-01
        相关资源
        最近更新 更多