Могу ли я сохранить пользовательскую версию 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)