Я перемещаю данные, которые 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.