我想跟踪存储的更改并将其存储在 storage_versions 表中,该表具有 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 StorageVersion < PaperTrail::Version
self.table_name = 'storage_versions'
end
据我所知它应该有用,但事实并非如此。我怎样才能做到这一点?
更新
对不完整的问题感到抱歉。 我定义了版本表(非抽象), storage_versions 表有 storage_type 列。
解决方案
将 storage_version.rb 移到 paper_trail 文件夹之外,并将has_paper_trail
的声明更改为
has_paper_trail class_name: 'StorageVersion', meta: { storage_type: :storage_type }
像@jemonsanto说的那样。谢谢@jemonsanto!
答案 0 :(得分:0)
可能有多种原因导致它无法通过:
您尚未发布架构,因此请检查是否已声明存储类型。
如果你没有versions
表,那肯定会破坏。
您可以通过将基类声明为每documentation的抽象类来解决此问题。
接下来,
您的类声明需要修复,因为它位于文件夹上,您需要将其添加到模块PaperTrail
。因此,您的课程应为PaperTrail::StorageVersion
。
如果您不想这样做,可以从子文件夹中删除该类,并让它位于models/
has_paper_trail
的方法声明似乎有点不稳定。你已经在参数中排除了类名。另请注意,您已将类放入app/models/paper_trail/storage_version
,您需要在方法声明中指定该路径。
has_paper_trail class_name: 'PaperTrail::StorageVersion', meta: { storage_type: storage_type }