使用 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
两次)。
我不认为跳过或忽略是我想要的,因为我确实希望对数据进行更改以生成新版本。
我应该走定制版模型路线吗?或者你推荐什么?
部分选项,按推荐降序排列(最强烈推荐在前):
version_limit
(支持)- 通过使用 [=10= 限制为给定记录创建的版本数量来保存磁盘 space ]. (https://github.com/airblade/paper_trail#2e-limiting-the-number-of-versions-created)
- Custom table(支持)- 自定义版本模型,自定义 table 没有
object_changes
列。排除实验关联功能(track_associations
必须是 false
[默认值])
- 补丁
recordable_object_changes
,方法1(不支持)-自定义版本模型,但仍在使用versions
table。将 #paper_trail
覆盖为 return RecordTrail
的自定义子 class,它覆盖了 RecordTrail#recordable_object_changes
。覆盖这些方法会破坏您的保证。
- 补丁
recordable_object_changes
,方法 2(不支持)- 覆盖 RecordTrail#recordable_object_changes
,添加 class-检查条件。为除您想要破解的模型之外的所有模型调用 super 。覆盖此方法会破坏您的保修。
- Custom serializer(受支持,但不支持此功能)- 具有 class 的自定义序列化器 - 检查条件,以及判断您是否正在序列化的某种方式
object_changes
而不是 object
。可能是个坏主意,看起来真的很老套。
最后,我很乐意查看添加新功能的 PR,即能够在每个模型的基础上配置哪些数据应写入 object_changes
列。如果你认真地致力于此,并坚持到底,请打开一个新问题,以便我们进一步讨论。有几种不同的设计可以工作。
2019 年更新:我们现在有 object_changes_adapter 它仅供专家用户使用,可能不是我的最高推荐。
这与 #837 有点相关,因为我的模型上有一个很大的数据列,但是我认为与该问题中提议的相反的东西可能会更好地为我服务 - 也就是说,维护对象列而不是 object_changes 列。
我们运行没有versions.object_changes列。现在我已经添加了这一列,我意识到我正在为 object_changes 中的数据列写入很多我不关心的数据 - 因为对数据的微小更改会导致它有效地写出到版本3 倍(前后 object
一次,object_changes
两次)。
我不认为跳过或忽略是我想要的,因为我确实希望对数据进行更改以生成新版本。
我应该走定制版模型路线吗?或者你推荐什么?
部分选项,按推荐降序排列(最强烈推荐在前):
version_limit
(支持)- 通过使用 [=10= 限制为给定记录创建的版本数量来保存磁盘 space ]. (https://github.com/airblade/paper_trail#2e-limiting-the-number-of-versions-created)- Custom table(支持)- 自定义版本模型,自定义 table 没有
object_changes
列。排除实验关联功能(track_associations
必须是false
[默认值]) - 补丁
recordable_object_changes
,方法1(不支持)-自定义版本模型,但仍在使用versions
table。将#paper_trail
覆盖为 returnRecordTrail
的自定义子 class,它覆盖了RecordTrail#recordable_object_changes
。覆盖这些方法会破坏您的保证。 - 补丁
recordable_object_changes
,方法 2(不支持)- 覆盖RecordTrail#recordable_object_changes
,添加 class-检查条件。为除您想要破解的模型之外的所有模型调用 super 。覆盖此方法会破坏您的保修。 - Custom serializer(受支持,但不支持此功能)- 具有 class 的自定义序列化器 - 检查条件,以及判断您是否正在序列化的某种方式
object_changes
而不是object
。可能是个坏主意,看起来真的很老套。
最后,我很乐意查看添加新功能的 PR,即能够在每个模型的基础上配置哪些数据应写入 object_changes
列。如果你认真地致力于此,并坚持到底,请打开一个新问题,以便我们进一步讨论。有几种不同的设计可以工作。
2019 年更新:我们现在有 object_changes_adapter 它仅供专家用户使用,可能不是我的最高推荐。