如何在纸质文件中使用meta的自定义版本表?

时间:2018-04-20 06:58:30

标签: ruby-on-rails paper-trail-gem

我想跟踪存储的更改并将其存储在 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!

1 个答案:

答案 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 }