Могу ли я сохранить пользовательскую версию object_changes в paper_trail?

При использовании paper_trail ( https://github.com/paper-trail-gem/paper_trail) существует ли более эффективный способ хранения object_changes? В частности, для столбцов jsonb в таблице хранится большой объем данных, поскольку в нем хранится все значение поля до и после внесения изменений, даже если изменение было одним ключом в большом объекте.

Прямо сейчас, когда я отправляю его в представление, я использую Hashdiff ( https://github.com/liufengyun/hashdiff), чтобы найти конкретные вещи, которые были изменены, но я должен запускать это каждый раз, когда загружается представление, плюс На БД большая нагрузка, так как все изменения полей сохраняются каждый раз - версии - моя самая большая таблица.

Есть ли возможность хранить Hashdiff непосредственно в object_changes и выгружать его в представление при каждой загрузке? Это сделало бы вещи намного быстрее и уменьшило бы нагрузку на БД.

1 ответ

Эшвин и я добавили эту функцию в PR 1102, выпущенный в 9.2. Вот запись в журнале изменений:

## 9.2.0 (2018-06-09)

### Added

- [#1093](https://github.com/paper-trail-gem/paper_trail/pull/1093) -
  `PaperTrail.config.object_changes_adapter` - Expert users can write their own
  adapter to control how the changes for each version are stored in the
  object_changes column. An example of this implementation using the hashdiff
  gem can be found here:
  [paper_trail-hashdiff](https://github.com/hashwin/paper_trail-hashdiff)
Другие вопросы по тегам