Как создать журнал изменений? - PullRequest
1 голос
/ 14 января 2011

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

Это рельсовый проект, но я думаю, что это не имеет значения.

Ответы [ 2 ]

2 голосов
/ 14 января 2011

Я сомневаюсь, что есть какое-либо общее решение этой проблемы.

Вы можете выкатить свой собственный. Начните с рассмотрения всех объектов, которые нуждаются в регистрации изменений. Сколько существует типов? Как часто вы ожидаете изменений? Это поможет вам оценить потенциальное количество изменений производительности, с которыми вам придется иметь дело. Если их не так много, просто вставьте их в базу данных. Если вы генерируете много, попробуйте сохранить файл с разделенными запятыми значениями.

Я уже реализовывал подобную систему. У меня было 3 типа изменений: 1) изменение значения свойства, 2) добавление значения в список, 3) удаление значения из списка.

Я использовал следующий формат, сохраненный в файле журнала:

//For type 1)
1,2011/01/01 00:00:00,MyObject,myProperty,oldValue,newValue
//For type 2)
2,2011/01/01 00:00:00,MyObject,myListProperty,addedValue
//For type 3)
3,2011/01/01 00:00:00,MyObject,myListProperty,removedValue

Это захватило большую часть информации, которая мне была нужна. Части value представляли собой просто читаемую пользователем сводку значения измененного / добавленного / удаленного свойства.

1 голос
/ 22 октября 2013

Бумага Trail Gem

Поскольку вы находитесь на Rails, взгляните на PaperTrail gem . Он делает именно то, что вы ищете, и прекрасно построен. Вам просто нужно добавить обратный вызов, чтобы ваша страница обзора знала, что произошло изменение. Но для истории модели просто используйте встроенную функциональность PaperTrail.

...