1

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

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

我想到了两种设计方案:

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

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

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

想法?

谢谢!林戈

4

2 回答 2

1

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

于 2012-05-01T17:28:02.007 回答
0

看看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

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

于 2012-05-01T17:41:42.293 回答