如何在文件记录中使用带有元数据的自定义版本表?
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 }
我想跟踪 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 声明需要修复,因为它位于文件夹中,您需要将其添加到模块 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 }