Методы хранения / извлечения исторических данных в Rails - PullRequest
1 голос
/ 15 апреля 2009

Я ищу некоторые идеи по сохранению снимка некоторых (разных) записей во время события, например, когда пользователь получает документ из моего приложения, чтобы этот документ можно было восстановить позже. Какие стратегии вы рекомендуете? Должен ли я использовать ту же таблицу, что и таблица с текущими значениями, или использовать хронологическую таблицу? Знаете ли вы какие-либо плагины, которые могли бы помочь мне с этой задачей? Пожалуйста, поделитесь своими мыслями и решениями.

Ответы [ 4 ]

3 голосов
/ 16 апреля 2009

Для этого есть несколько плагинов.

Acts_audited

действует как проверенный, создает единую таблицу для всех проверяемых объектов и не требует никаких изменений в существующих таблицах. Вы получаете запись для каждого изменения с изменениями, сохраненными в виде хэша в памятном поле, тип изменения (CRUD). Это очень легко настроить с помощью всего лишь одного оператора в контроллере приложения, указывающего, какие модели вы хотите проверять. Откат зависит от вас, но информация там. Поскольку хранимая информация представляет собой только изменения, создание целого объекта может быть затруднено из-за последующих изменений.

Acts_as_versioned

Немного сложнее в настройке - вам нужна отдельная таблица для каждого объекта, который вы хотите версии, и вам нужно добавить идентификатор версии в существующую таблицу. Откат это очень просто. На github есть вилки, которые предоставляют хэш изменений с последней версии, поэтому вы можете легко выделить различия (это то, что я использую). Я думаю, что это самое популярное решение.

Те, с которыми у меня нет опыта: act_as_revisable. Я, вероятно, попробую в следующий раз, когда мне понадобится версия, так как она выглядит намного более сложной.

2 голосов
/ 15 апреля 2009

Я использовал acts_as_versioned для подобных вещей.

2 голосов
/ 15 апреля 2009

Я сделал это однажды некоторое время назад. Мы создали новую таблицу, которая имела структуру, очень похожую на ту, которую мы хотели регистрировать, и всякий раз, когда нам нужно было что-то регистрировать, мы делали нечто похожее на это:

attr = object_to_log.attributes
# Remove things like created_at, updated_at, other unneeded columns
log = MyLogger.new(attrs)
log.save

Есть очень хороший шанс, что есть плагины / гемы для подобных вещей.

0 голосов
/ 14 июля 2010

ОП уже год, но я решил добавить vestal_versions к миксу. Он использует одну таблицу для отслеживания сериализованных хэшей каждой версии. Просматривая запись изменений, модели могут быть возвращены в любой момент времени.

Кажется, что это фаворит сообщества с этого поста ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...