这与#837有些相关,因为我的模型上有一个大数据列,但我认为我可能会更好地服务于该问题中提出的相反内容 - 也就是说,维护对象列而不是object_changes列。
我们一直在运行,没有versions.object_changes列。现在我已经添加了这个专栏,我意识到我正在编写很多我不关心object_changes中数据列的数据 - 因为对数据的微小改变会导致它被有效地写入版本3x(一次在object
,两次在object_changes
,用于之前和之后。)
我不认为跳过或忽略是我想要的,因为我确实希望对数据进行更改以生成新版本。
我应该沿着自定义版本模式路线走下去吗?或者你推荐什么?
答案 0 :(得分:3)
一些选项,按建议的降序排列(最强烈推荐的第一个):
version_limit
(支持) - 使用version_limit
通过限制为给定记录创建的版本数来节省磁盘空间。 (https://github.com/airblade/paper_trail#2e-limiting-the-number-of-versions-created)object_changes
列的自定义表格。排除实验关联功能(track_associations
必须为false
[默认])recordable_object_changes
,方法1 (不支持) - 自定义版本模型,但仍使用versions
表。覆盖#paper_trail
以返回覆盖RecordTrail
的自定义子类RecordTrail#recordable_object_changes
。覆盖这些方法会损害您的保修期。recordable_object_changes
,方法2 (不支持) - 覆盖RecordTrail#recordable_object_changes
,添加类检查条件。除了你要破解的模型之外,为所有人打电话。覆盖此方法会损害您的保修期。object_changes
而非{{1}的某种方式}。可能是一个坏主意,看起来真是太烂了。最后,我很乐意审核一个增加新功能的PR,能够在每个模型的基础上配置哪些数据应写入object
列。如果你真的想要做到这一点,并看到它完成,请打开一个新的问题,以便我们进一步讨论。有一些不同的设计可以发挥作用。
更新,2019:我们现在有object_changes_adapter这仅适用于专家用户,可能不是我的最佳推荐。