Для проекта, над которым я сейчас работаю, мне нужно реализовать управление версиями объектов.К сожалению, мне нужно вести полную историю каждого объекта, поэтому решение для одной таблицы, такое как Papertrail, быстро станет неуправляемым.Однако мне нравятся функции Papertrail, которые я не смог найти в решении с отдельными таблицами для каждой модели (например, activ_as_versioned).
- Возможность хранения метаинформацииот контроллера и модели
- Данные сериализуются, поэтому изменения схемы не изменяют таблицу версий
- Мощные методы для просмотра версий
- Автоматическое отслеживание ответственности за изменения
Есть также некоторые функции, которых нет у Papertrail, которые могут быть бонусами:
- Поддержка diff встроенной версии
- Дифференциал вместо полных версий
В настоящее время я рассматриваю возможность использования Papertrail для использования отдельных таблиц для каждой модели, но хотел бы сэкономить эти усилия, если есть существующее решение.
Обновление: Vestal Versions по умолчанию использует одну таблицу, но, предоставив собственный класс версий для каждой модели и используя метод "set_table_name" ActiveRecord, я смог создать отдельные таблицыдля каждой модели.Vestal Versions также имеет встроенную поддержку diff, хотя его интерфейс не такой мощный, как Papertrails.В нем также отсутствует поддержка ассоциаций.
Обновление 2: Поскольку papertrail кажется более активным проектом, я разветвил этот камень и добавил поддержку пользовательских классов, аналогичную версиям vestal, которые теперь позволяютвозможность определять отдельные таблицы для каждой модели.Мой форк уже здесь, но я надеюсь, что он скоро будет добавлен в основной репозиторий проекта.https://github.com/benzittlau/paper_trail