首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails中的对象版本控制,类似于书面记录,但单独的表

Rails中的对象版本控制,类似于书面记录,但单独的表
EN

Stack Overflow用户
提问于 2011-03-18 07:05:48
回答 2查看 5.4K关注 0票数 14

对于我目前正在处理的一个项目,我需要实现对象版本控制。不幸的是,我需要保存每个对象的完整历史记录,因此像Papertrail这样的单表解决方案很快就会变得难以管理。然而,有一些我喜欢的书面记录的功能,我在每个模型都有单独的表的解决方案中找不到(比如acts_as_versioned)。

  • 能够存储来自控制器和模型的元信息,并且
  • 数据是序列化的,因此模式更改不会修改版本表
  • 用于遍历responsibility

跟踪更改的强大方法

还有一些书面记录没有的功能,这些功能将是额外的:

  • 内置版本比较support
  • Differential,而不是完整版本

我目前正在考虑对每个模型使用单独的表格,但如果有现有的解决方案,我想省去这方面的工作。

更新:默认情况下, Vestal版本使用单个表,但是通过为每个模型提供一个自定义版本类并使用ActiveRecord的"set_table_name“方法,我能够为每个模型创建单独的表。Vestal版本也有内置的diff支持,尽管它的界面没有Papertrails那么强大。它也缺乏关联支持。

更新2: As papertrail似乎是一个更活跃的项目,我已经在gem上创建了分支,并添加了类似于vestal版本的自定义类支持,现在可以为每个模型定义单独的表。我的fork在这里,但我希望它很快就会被拉到主项目存储库中。https://github.com/benzittlau/paper_trail

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-29 22:07:45

您可以使用:class_name选项指定自定义版本子类:

代码语言:javascript
复制
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

这允许您将每个模型的版本存储在单独的表中,如果要创建大量版本,这将非常有用。

票数 12
EN

Stack Overflow用户

发布于 2011-03-18 10:49:12

我一直在使用Vestal Versions,这是一个使用memento模式创建历史表的rails gem/plugin,它在after_save和after_destroy回调中保存了不同的属性。

它还记录更改的时间,并递增版本号,以便您可以回滚到特定版本或在特定日期或时间存在的版本。

然后,我可以像这样拉出一个对象:

代码语言:javascript
复制
@user = User.last
@user.versions.last.changes #=> {:name => ['Robert','Bob']}

我是你的铁杆粉丝。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5346367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档