对于我目前正在进行的项目,我需要实现对象版本控制。不幸的是,我需要保留每个对象的完整历史记录,因此像 Papertrail 这样的单表解决方案很快就会变得无法管理。然而,Papertrail 有一些我喜欢的功能,但我无法在每个模型的单独表的解决方案中找到这些功能(例如acts_as_versioned)。
- 能够存储来自控制器和模型的元信息
- 数据已序列化,因此架构更改不会修改版本表
- 遍历版本的强大方法
- 自动跟踪变更责任
还有一些 Papertrail 没有的功能可以作为奖励:
- 内置版本差异支持
- 差分版本而不是完整版本
我目前正在考虑分叉 Papertrail 为每个模型使用单独的表,但如果有现有的解决方案,我希望节省这项工作。
更新: Vestal 版本默认使用单个表,但通过为每个模型提供自定义版本类并使用 ActiveRecord 的“set_table_name”方法,我能够为每个模型创建单独的表。Vestal Versions 还内置了差异支持,尽管它的界面不如 Papertrails 强大。它也缺乏关联支持。
更新 2: 由于 papertrail 似乎是一个更活跃的项目,我已经分叉了 gem,并添加了类似于 Vestal 版本的自定义类支持,现在允许为每个模型定义单独的表。我的 fork 在这里,但我希望它很快会被拉入主项目存储库。 https://github.com/benzittlau/paper_trail