【问题标题】:perform some logic before object is loaded from database在从数据库加载对象之前执行一些逻辑
【发布时间】:2011-02-06 23:07:01
【问题描述】:

情况:

杂志接受投稿。提交后,编辑将安排您的提交进行审核。审核通过后,您将无法再对其进行编辑。

所以,我在各个州都有提交。 “Draft”、“queued”、“reviewed”等。大多数进入这些不同状态的切换都是由某些操作触发的,例如,当编辑安排提交时,提交进入队列。轻松愉快。但是,切换到“已审核”状态不是由任何操作触发的,它只是在某个日期时间过去后发生。

我对如何做到这一点有两个想法:

  1. 运行每日/每小时 cron 作业以检查所有排队的提交,并在必要时将其切换为已审核。我不喜欢这个,因为
    1. 我希望它是每小时一次,这样我可以在会议开始前最多三个小时编辑我的提交
    2. Heroku 上按小时计费的 cron 作业要花钱,而这个应用程序要么永远不会赚钱,要么在未来几个月都不会赚钱
  2. 不知何故构造了一个before_load ActiveRecord 回调,它会在每次加载提交时执行一些逻辑。 “排队?没有?没关系。否则,如果距离会议不到三个小时,则将其切换为‘已审核’。”

我想就第二个想法征求人们的意见。

  1. 这是一种非常臭的方法吗?
  2. 如果是这样,你能推荐一个更棒的第三种方法吗?
  3. 如果以上两项都为“否”,您能否提供有关每次从数据库加载记录时如何执行此类逻辑的提示?在从submissions 表中执行select 之前,我需要始终执行一些逻辑(该表正准备成为应用程序中查询最多的表......)

如果没有很好的方法来完成选项二(或者,我希望!选项三),我将使用选项一来完成每日的 cron 工作。能够在会议前一天进行编辑就足够了。

【问题讨论】:

    标签: ruby-on-rails activerecord callback cron


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 2015-04-03
      • 1970-01-01
      • 2019-02-10
      • 2020-11-12
      相关资源
      最近更新 更多