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

时间:2016-11-22 18:48:59

标签: ruby-on-rails ruby paper-trail-gem

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

我们一直在运行,没有versions.object_changes列。现在我已经添加了这个专栏,我意识到我正在编写很多我不关心object_changes中数据列的数据 - 因为对数据的微小改变会导致它被有效地写入版本3x(一次在object,两次在object_changes,用于之前和之后。)

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

我应该沿着自定义版本模式路线走下去吗?或者你推荐什么?

1 个答案:

答案 0 :(得分:3)

一些选项,按建议的降序排列(最强烈推荐的第一个):

  1. version_limit (支持) - 使用version_limit通过限制为给定记录创建的版本数来节省磁盘空间。 (https://github.com/airblade/paper_trail#2e-limiting-the-number-of-versions-created
  2. 自定义表格(支持) - 自定义版本模型,不含object_changes列的自定义表格。排除实验关联功能(track_associations必须为false [默认])
  3. 修补程序recordable_object_changes,方法1 (不支持) - 自定义版本模型,但仍使用versions表。覆盖#paper_trail以返回覆盖RecordTrail的自定义子类RecordTrail#recordable_object_changes。覆盖这些方法会损害您的保修期。
  4. 修补程序recordable_object_changes,方法2 (不支持) - 覆盖RecordTrail#recordable_object_changes,添加类检查条件。除了你要破解的模型之外,为所有人打电话。覆盖此方法会损害您的保修期。
  5. 自定义序列化程序(支持,但不适用于此) - 带有类检查条件的自定义序列化程序,以及告诉您是序列化object_changes而非{{1}的某种方式}。可能是一个坏主意,看起来真是太烂了。
  6. 最后,我很乐意审核一个增加新功能的PR,能够在每个模型的基础上配置哪些数据应写入object列。如果你真的想要做到这一点,并看到它完成,请打开一个新的问题,以便我们进一步讨论。有一些不同的设计可以发挥作用。

    更新,2019:我们现在有object_changes_adapter这仅适用于专家用户,可能不是我的最佳推荐。