Изменить класс связей версии PaperTrail - PullRequest
0 голосов
/ 22 апреля 2020

Я перемещаю данные, которые PaperTrail хранит в другую базу данных. Я достиг этого путем создания подкласса класса PaperTrail::Version и установки имени класса в моей модели, использующей PaperTrail, в соответствии с do c.

Примерно так:

# Custom version class
module PaperTrail
  class CustomVersion < ::PaperTrail::Version
    connects_to database: { writing: :versions_db, reading: :versions_db }
  end
end

# Model that uses papertrail
class MyModel < ApplicationRecord
  has_paper_trail versions: { class_name: 'PaperTrail::CustomVersion' }
end

Кажется, это работает нормально, если вы не используете paper_trail-association_tracking . Если вы используете, вы получаете сообщение об ошибке, например:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation "version_associations" does not exist
LINE 8:  WHERE a.attrelid = '"version_associations"'::regclass

Я решил эту проблему, изменив класс PaperTrail :: VersionAssociations в инициализаторе PaperTrail, как предложено в этой проблеме .

#config/initializers/paper_trail.rb

PaperTrail.config.track_associations = true

PaperTrail::VersionAssociation.class_eval do
  self.table_name = 'version_associations'
  connects_to database: { writing: :versions_db, reading: :versions_db }
end

Хотя это решает проблему, я хотел бы знать, существует ли какая-либо другая альтернатива, аналогичная той, которая используется для расширения поведения PaperTrail::Version, процитированного в do c.

...