【问题标题】:How to use custom version tables with meta in paper trail?如何在纸质记录中使用带有元数据的自定义版本表?
【发布时间】:2018-09-30 19:51:25
【问题描述】:

我想跟踪 storages 的变化并将其存储在 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

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

更新

抱歉,问题不完整。 我定义了 versions 表(不是抽象的),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!

【问题讨论】:

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


    【解决方案1】:

    无法通过的原因可能有很多:

    您尚未发布架构,因此请检查是否声明了存储类型。

    如果您没有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 }

    【讨论】:

    • 抱歉问题不完整。通过将 storage_version.rb 移出 paper_trail 文件夹并更改了 Storage.rb 中 has_paper_trail 的声明来解决问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2019-10-27
    • 2019-02-08
    • 2010-09-21
    相关资源
    最近更新 更多