在Rails中存储/检索历史数据的技术

时间:2009-04-15 15:27:59

标签: ruby-on-rails database database-design

我正在寻找关于在事件发生时保存某些(不同)记录的快照的一些想法,例如用户从我的应用程序中获取文档,以便稍后可以重新生成此文档。你推荐什么策略?我应该使用与具有当前值的表相同的表还是使用历史表?你知道任何可以帮助我完成任务的插件吗?请分享您的想法和解决方案。

4 个答案:

答案 0 :(得分:3)

这有几个插件。

Acts_audited

作为审计的行为为所有可审计对象创建单个表,并且不需要更改现有表。每次更改都会进入,并将更改存储为备注字段中的哈希值,即更改类型(CRUD)。只需在应用程序控制器中使用一个语句来设置您想要审核的模型,就可以轻松进行设置。 回滚取决于你,但信息就在那里。因为存储的信息只是构建的变化,所以由于随后的变化,整个对象可能很难。

Acts_as_versioned

设置有点复杂 - 您需要为要版本的每个对象创建一个单独的表,并且必须在现有表中添加版本ID。回滚很容易。 github上的分叉提供了自上一版本以来的更改哈希,因此您可以轻松突出显示差异(这是我使用的)。我的猜测是这是最受欢迎的解决方案。

我没有经验:acts_as_revisable。我可能会在下次需要版本控制时再给它一个,因为它看起来更复杂。

答案 1 :(得分:2)

我曾经这样做过一次。我们创建了一个新表,其结构与我们想要记录的表非常相似,每当我们需要记录某些内容时,我们做了类似的事情:

attr = object_to_log.attributes
# Remove things like created_at, updated_at, other unneeded columns
log = MyLogger.new(attrs)
log.save

很有可能插件/宝石可以做这样的事情。

答案 2 :(得分:2)

我曾使用acts_as_versioned这样的东西。

答案 3 :(得分:0)

OP已经有一年了,但我认为我会添加vestal_versions。它使用单个表来跟踪每个版本的序列化哈希值。通过遍历变更记录,模型可以恢复到任何时间点。

这篇文章似乎是社区的最爱...

相关问题