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