首页 > 解决方案 > 有谁知道全局范围 ActiveRecord 的方法?我希望及时获得整个数据库的快照

问题描述

在工作中,我经常需要调查之前状态的数据。例如,用户 3 天前在其应用中看到了时间敏感信息(他们最近 50 条订单记录)。此后,该信息已被新订单覆盖。为了复制该问题以进行调试,我需要在某个时间戳之前限制所有相关数据(订单、用户交互等)。

我的问题归结为:与其确定我正在查询的每个表的范围(并冒着遗漏某些东西的风险),是否有一种干净的方法来确定在此类调查期间可能查询的记录和表上的所有时间戳?

我在 Rails 5.1.6 上

标签: ruby-on-railsrubyactiverecordrails-activerecord

解决方案


这听起来像是 ARel 的工作。ARel 使构建基于时间/系统时钟的 Scopes 变得更加容易。您可以根据需要定义任意数量的这些。

ARel:

scope :created_at_before, ->(timestamp) { where( arel_table[:created_at].gte(timestamp) }
scope :created_at_over_three_months_ago, { created_at_before(3.months.ago) }
#and so on and so on...

但我不得不问这个......

您需要“数据库的时间快照”。

备份一下?????? 数据库的备份是数据库时间快照。在单独的计算机上恢复此备份。您甚至可以使用cronHeroku Scheduler 或您的平台等价物自动进行这些备份。


推荐阅读