首页 > 解决方案 > 如何在 ruby​​ on rails 中创建短暂的数据库条目?

问题描述

我想创建一些应该是短暂的,1 天左右的通知。这样,如果用户今天访问所有通知,我就可以发送这些通知,但明天不行。

假设有人正在创建一些帖子,我想在帖子上传成功时向他们发送通知。但该通知明天就无关紧要了,而且会造成不必要的混乱。

我考虑Sidekiq过在一个钩子中使用该过程,after_commit触发一个sidekiq作业在之后运行18 hrs,例如:

after_commit :trigger_destroyer

private 

def trigger_destroyer
  if notification_type == 'shortlived'
    NotificationDestroyer.perform_in(3.hours.from_now, id)
  end
end

或者我可以运行一个读取 created_at 和通知类型的 cron 作业并在那里删除它们。

有没有更好的方法?

标签: ruby-on-railsrubypostgresqlactiverecord

解决方案


您可以创建一个清除整个表的ActiveJob或 Rake 任务:

class NotificationCleanupJob < ApplicationJob
  queue_as :default

  def perform
    Notification.where('created_at < ?', 30.days.ago).delete_all
  end
end

有多种 gem 可用于设置重复性工作,例如whenever、和. Heroku 也有一个内置的调度器。chronoclockworkrufus-scheduler

这比设置一次执行这一行的作业要有效得多,这几乎会不断地消耗工作进程。

当您在 Rails 中显示/使用记录时,这应该与过滤相结合。


推荐阅读