Просто наткнулся на это, понял, что это немного устарело, но подумал, что поделюсь своим решением, поскольку у меня было такое же требование. Это только частичное решение, но оно работает
Я расширил класс PaperTrail Version и переопределил геттер item_type.
class AuditTrail < PaperTrail::Version
xss_foliate :except => [:object, :object_changes]
def item_type
if(self[:item_type] == "SomethingIWantToChange")
return "Different String"
end
return self[:item_type]
end
end
Затем я настроил каждую из своих моделей на использование этого класса следующим образом:
has_paper_trail :class_name => 'AuditTrail'
Затем я могу запросить таблицу версий, и возвращенные объекты будут проходить через переопределенный геттер, а item_type будет таким, как мне нужно:
audit_records = AuditTrail.where(someproperty: "something")
Так что это на самом деле не изменяет его в БД, когда он написан, но это лучший способ, который я мог найти, чтобы представить его по-другому для моего интерфейса.
Обратите внимание, что он не изменяет item_type, если вы извлекаете версии без использования запроса из вашего расширенного объекта, т.е.:
Someobject.find(1).versions.last
^ это по-прежнему возвращает item_type из БД
person
Andy
schedule
23.01.2017