PaperTrail est une gem utilisée pour tracker les changements faits sur un objet.
https://github.com/paper-trail-gem/paper_trail
Copier dans le Gemfile la gem paper_trail
gem 'paper_trail’
puis lancer ces 2 commandes:
bundle exec rails generate paper_trail:install --with-changes --uuid
bundle exec rails db:migrate
has_paper_trail
dans le modelclass Model < ActiveRecord::Base
has_paper_trail
end
class ApplicationController
before_action :set_paper_trail_whodunnit
end
# Récupérer toutes les versions/changement de l'objet
model.versions
# [<PaperTrail::Version>, <PaperTrail::Version>, ...]
# Par exemple sur le dernier changement
version = model.version.last
# Récupérer qui est responsable du changement
version.whodunnit # ID of `current_user`.
# Récupérer l'évènment
version.event # 'update', 'create'...
# Récupérer exactement ce qui a été changé
version.changeset
# {
# "name"=>["Bob", "Robert"],
# "updated_at"=>[2015-08-10 04:13:19 UTC, 2015-08-10 04:13:19 UTC]
# }
# Ici on a pour le name, la version d'avant 'Bob' et la version d'après 'Robert'
Une liste d’erreurs souvent rencontrées et de choses auxquelles penser en appliquant une de ces méthodes
Penser à autoriser de désérialiser des dates. On a eu la difficulté sur IRIS (cf https://github.com/paper-trail-gem/paper_trail/issues/1462)
# config/application.rb
config.active_record.yaml_column_permitted_classes = [Date]
cf ce PDCA ‣