如何在文件记录中使用带有元数据的自定义版本表?

How to use custom version tables with meta in paper trail?

我想跟踪 storages 的变化并将其存储在 storage_versions table 中column storage_type 存储修改的存储类型。我正在尝试这样做:

class Storage < ApplicationRecord
    has_paper_trail(meta: {storage_type: :storage_type}), class_name: 'StorageVersion'
//additional methods here
end

并且我在 app/models/paper_trail/storage_version.rb 处定义了 'StorageVersion' class,如下所示:

class StorageVersion < PaperTrail::Version
    self.table_name = 'storage_versions'
end

据我所知,它应该可以工作,但事实并非如此。我怎样才能使这项工作?

更新

抱歉,问题不完整。 我有 versions table 定义(不是抽象的),storage_versions table 有 storage_type 列。

解决方案

storage_version.rb 移到 paper_trail 文件夹之外,并将 has_paper_trail 的声明更改为

has_paper_trail class_name: 'StorageVersion', meta: { storage_type: :storage_type }

就像@jemonsanto 说的。谢谢@jemonsanto!

无法通过的原因有很多:

您还没有发布模式,所以请检查那里是否声明了存储类型。

如果你没有 versions table 那么它肯定会坏掉。 您可以通过将基础 class 声明为每个 documentation.

的抽象 class 来解决此问题

接下来,

您的 class 声明需要修复,因为它位于文件夹中,您需要将其添加到模块 PaperTrail。因此,您的 class 应该是 PaperTrail::StorageVersion.

如果您不想那样做,您可以从子文件夹中删除 class 并让它驻留在 models/

您对 has_paper_trail 的方法声明似乎有点靠不住。您已在参数中排除了 class 名称。还注意到您已将 class 放在 app/models/paper_trail/storage_version 中,您需要在方法声明中指定该路径。

has_paper_trail class_name: 'PaperTrail::StorageVersion', meta: { storage_type: storage_type }