使用单独的数据库进行 papertrail 版本控制

shi*_*iva 5 ruby ruby-on-rails multiple-databases paper-trail-gem

我正在尝试使用 papertrail 将模型的更改事件记录在单独的数据库中。

我正在使用 Rails 4.1.2

红宝石2.1

纸迹 4.0.0

下面是我在关注中添加的代码

module Foo
  class Base < ActiveRecord::Base
  end

 class Version < Base
  include PaperTrail::VersionConcern
 end

 class Topic < Base
   has_paper_trail class_name: 'Foo::Version'
 end
end
Foo::Base.establish_connection(:trail_development)
Run Code Online (Sandbox Code Playgroud)

我已将这个 Foo 包含在 topic.rb 中

class Topic < ActiveRecord::Base
  include Foo
end
Run Code Online (Sandbox Code Playgroud)

当我尝试创建、编辑或删除主题时,这不起作用。

参考https://github.com/airblade/paper_trail/pull/289

Ton*_*rra 4

在 Rails 6.0 或更高版本中,这可以通过创建一个连接到单独数据库的抽象类来完成,Version如下所示:

class AbstractVersion < PaperTrail::Version
  self.abstract_class = true
  connects_to database: { writing: :my_database, reading: :my_database }
end

class MyVersion < AbstractVersion
  # Optional: specify a different table name.
  # self.table_name = :my_versions
end

class Topic < ApplicationRecord
  has_paper_trail versions: {
    class_name: "MyVersion"
  }
end
Run Code Online (Sandbox Code Playgroud)

在 Rails 中,必须将模型定义为抽象模型才能使用不同的数据库连接。

PaperTrail 允许您通过扩展其基类来定义自定义版本类PaperTrail::Version

这可以通过创建添加调用的模块来进一步抽象has_paper_trail