Rails App:在 paper_trail 中使用多个版本表

Rails App: using multiple versions table in paper_trail

提问人:moh19814 提问时间:9/11/2023 更新时间:9/11/2023 访问量:43

问:

我的应用程序正在使用 Rails 7.0.4 和 Ruby 3.0.4。 该应用程序使用多个带有 Active Record 的数据库(主数据库和辅助数据库),每个数据库都位于特定服务器上。 在应用程序中,我有不同的模型,它们都具有从主数据库读取和写入访问权限,并且还启用了paper_trail。 只有一个模型(学生)具有从辅助数据库读取和写入访问权限。

在数据库(主数据库和辅助数据库)上,都有一个“版本”表。

我想做的是,将 Student 模型的版本表设置为辅助数据库。因此,对于所有模型,版本表将位于主数据库上;并且仅对于 Student 模型,版本表将位于辅助数据库上。 到目前为止,Hier 是我的配置:

 class StudentRecord < ApplicationRecord
    self.abstract_class = true
    # acts_as_paranoid
    acts_as_paranoid
    # paper_trail
    has_paper_trail :versions => { :class_name => "StudentVersion" }
    connects_to database: { reading: :secondary, writing: :secondary }
  end
  class StudentVersion < PaperTrail::Version    
    self.table_name = "school_log.versions"
    self.sequence_name = "school_log.versions_id_seq"
  end
development:
  primary:
    adapter: postgresql
    host: xxxxxxxxxxxxx
    database: school_portal
    username: xxxxxxxxxxxxx
    password: xxxxxxxxxxxxx
    pool: 20
    schema_search_path: "public,school_data,school_log"

  secondary:
    adapter: postgresql
    host: xxxxxxxxxxxxx
    database: school_portal
    port: xxxxxxxxxxxxx
    username: xxxxxxxxxxxxx
    password: xxxxxxxxxxxxx
    pool: 14
    schema_search_path: "public,school_data,school_log"
class Student < StudentRecord
.....
end

我的配置是否正确?如何将 Student 模型的版本表设置为辅助数据库?

此外,在控制台中,如果我更改学生即时记录中的某些参数并尝试保存它 (.save),我收到错误“ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violations unique constraint ”versions_pkey“”。如何解决这个问题?

Ruby-on-Rails PostgreSQL 多数据库 paper-trail-gem

评论


答: 暂无答案