在从数据库加载对象之前执行一些逻辑

时间:2011-02-06 23:07:02

标签: ruby-on-rails activerecord callback cron

情况:

该杂志接受提交。提交后,编辑会安排您提交的内容以供审核。审核完成后,您将不再允许对其进行编辑。

所以,我已在各州提交。 “草稿”,“排队”,“已审核”等等。大多数进入这些不同状态的切换都是由某些操作触发的,例如,当编辑器安排提交时,提交就会排队。容易狡猾。但是,切换到“已审核”状态不会由任何操作触发,只是在某个日期时间过后才会发生。

我对如何实现这个有两点想法:

  1. 运行每日/每小时的cron作业以检查所有排队的提交,并在必要时将其切换为已审核。我不喜欢这个因为
    1. 我希望它是每小时一次,以便我可以在会议开始前三小时编辑我的提交
    2. 每小时的cron工作在Heroku上花钱,这个应用程序要么永远都不能赚钱,要么在未来几个月和几个月都不赚钱
  2. 以某种方式构造一个before_load ActiveRecord回调,每次加载时都会对提交执行一些逻辑。 “排队?不?没关系。否则,如果会议距离不到三小时,请将其切换为'已审核'。”
  3. 我希望得到人们对第二个想法的意见。

    1. 这是一种非常臭的方式来实现这个目标吗?
    2. 如果是这样,你能建议第三种方式吗?
    3. 如果对上述两个都“不”,您是否可以在每次从数据库加载记录时提供有关如何执行此类逻辑的提示?在从select表(正准备成为应用程序中查询次数最多的表...)中执行submissions之前,我需要始终执行一些逻辑。
    4. 如果没有好的方法来完成选项二(或者,我希望!,选项三),我将使用每日cron作业的选项一。能够在会议前一天编辑就足够了。

1 个答案:

答案 0 :(得分:1)

也许使用after_find,虽然你的表现会有点糟糕,但如果你做的事情和before_load一样疯狂,性能会很糟糕,那说钱可能比性能更重要,如果是这样的话,我会选择after_find。