使用 PaperTrail,我可以为特定模型或属性选择退出“object_changes”吗?

Using PaperTrail, can I opt out of `object_changes` for a particular model or attribute?

这与 #837 有点相关,因为我的模型上有一个很大的数据列,但是我认为与该问题中提议的相反的东西可能会更好地为我服务 - 也就是说,维护对象列而不是 object_changes 列。

我们运行没有versions.object_changes列。现在我已经添加了这一列,我意识到我正在为 object_changes 中的数据列写入很多我不关心的数据 - 因为对数据的微小更改会导致它有效地写出到版本3 倍(前后 object 一次,object_changes 两次)。

我不认为跳过或忽略是我想要的,因为我确实希望对数据进行更改以生成新版本。

我应该走定制版模型路线吗?或者你推荐什么?

部分选项,按推荐降序排列(最强烈推荐在前):

  1. version_limit(支持)- 通过使用 [=10= 限制为给定记录创建的版本数量来保存磁盘 space ]. (https://github.com/airblade/paper_trail#2e-limiting-the-number-of-versions-created)
  2. Custom table(支持)- 自定义版本模型,自定义 table 没有 object_changes 列。排除实验关联功能(track_associations 必须是 false [默认值])
  3. 补丁recordable_object_changes,方法1(不支持)-自定义版本模型,但仍在使用versionstable。将 #paper_trail 覆盖为 return RecordTrail 的自定义子 class,它覆盖了 RecordTrail#recordable_object_changes。覆盖这些方法会破坏您的保证。
  4. 补丁 recordable_object_changes,方法 2(不支持)- 覆盖 RecordTrail#recordable_object_changes,添加 class-检查条件。为除您想要破解的模型之外的所有模型调用 super 。覆盖此方法会破坏您的保修。
  5. Custom serializer(受支持,但不支持此功能)- 具有 class 的自定义序列化器 - 检查条件,以及判断您是否正在序列化的某种方式 object_changes 而不是 object。可能是个坏主意,看起来真的很老套。

最后,我很乐意查看添加新功能的 PR,即能够在每个模型的基础上配置哪些数据应写入 object_changes 列。如果你认真地致力于此,并坚持到底,请打开一个新问题,以便我们进一步讨论。有几种不同的设计可以工作。

2019 年更新:我们现在有 object_changes_adapter 它仅供专家用户使用,可能不是我的最高推荐。