Ruby on rails Rails中的对象版本控制,如Papertrail,但为单个表
对于我目前正在进行的项目,我需要实现对象版本控制。不幸的是,我需要保存每个对象的完整历史记录,因此像Papertrail这样的单个表解决方案很快就会变得不可管理。不过,我喜欢Papertrail的一些特性,但在每个模型都有单独的表的解决方案中,我找不到这些特性(例如acts\U as\U版本)Ruby on rails Rails中的对象版本控制,如Papertrail,但为单个表,ruby-on-rails,versioning,database-versioning,Ruby On Rails,Versioning,Database Versioning,对于我目前正在进行的项目,我需要实现对象版本控制。不幸的是,我需要保存每个对象的完整历史记录,因此像Papertrail这样的单个表解决方案很快就会变得不可管理。不过,我喜欢Papertrail的一些特性,但在每个模型都有单独的表的解决方案中,我找不到这些特性(例如acts\U as\U版本) 能够存储来自控制器和模型的元信息 数据被序列化,因此架构更改不会修改版本表 遍历版本的强大方法 自动跟踪变更责任 还有一些Papertrail不具备的功能,这些功能可能是奖金: 内置版本差异支持 差
- 能够存储来自控制器和模型的元信息
- 数据被序列化,因此架构更改不会修改版本表
- 遍历版本的强大方法
- 自动跟踪变更责任
- 内置版本差异支持
- 差异化而非完整版本
@user = User.last
@user.versions.last.changes #=> {:name => ['Robert','Bob']}
我是个超级粉丝。您可以使用:class\u name选项指定自定义版本的子类:
class Post < ActiveRecord::Base
has_paper_trail :class_name => 'PostVersion'
end
class PostVersion < Version
# custom behaviour, e.g:
self.table_name = :post_versions # in rails 2, use set_table_name
end
class Post'PostVersion'
结束
类后版本<版本
#习惯行为,例如:
self.table_name=:发布版本#在rails 2中,使用set_table_name
结束
这允许您将每个模型的版本存储在一个单独的表中,如果您创建了许多版本,这将非常有用。Vestal版本与Papertrail一样,使用一个表来存储其版本对象,因此不适合我的应用程序,正如原始帖子中所解释的那样。为什么每个模型都需要一个单独的表?老式插件的作用与版本化的工作方式相同。每个模型都需要一个单独的表,因为所有版本化对象的一个表将很快增长到无法管理的大小,尤其是当我希望这个表能够被频繁地读写时,我们真的需要使用set_table_name吗?因为它是这个类的默认派生表名?PostVersion=>post_version如果您的类继承自AR::Base,则确实如此,但这里不是这种情况。在单个表中已经有一组历史记录之后,我可以开始使用不同的表吗?当然可以,只要迁移您关心的所有数据