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