@@ -37,6 +37,16 @@ class AuditingAdapter
3737 created_at : :created_at ,
3838 message : :event ,
3939 } . freeze
40+ E_VERSION_MODEL_NOT_SET = <<-EOS . strip_heredoc . freeze
41+ Please set up PaperTrail's version model explicitly.
42+
43+ config.audit_with :paper_trail, 'User', 'PaperTrail::Version'
44+
45+ If you have configured a model to use a custom version class
46+ (https://github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)
47+ that configuration will take precedence over what you specify in
48+ `audit_with`.
49+ EOS
4050
4151 def self . setup
4252 raise ( 'PaperTrail not found' ) unless defined? ( ::PaperTrail )
@@ -59,7 +69,7 @@ def initialize(controller, user_class = 'User', version_class = '::Version')
5969 begin
6070 @version_class = version_class . to_s . constantize
6171 rescue NameError
62- raise "Please set up Papertrail's version model explicitly. Ex: config.audit_with :paper_trail, 'User', 'PaperTrail::Version'"
72+ raise E_VERSION_MODEL_NOT_SET
6373 end
6474 end
6575
@@ -91,6 +101,7 @@ def listing_for_object(model, object, query, sort, sort_reverse, all, page, per_
91101
92102 protected
93103
104+ # - model - a RailsAdmin::AbstractModel
94105 def listing_for_model_or_object ( model , object , query , sort , sort_reverse , all , page , per_page )
95106 if sort . present?
96107 sort = COLUMN_MAPPING [ sort . to_sym ]
@@ -99,11 +110,10 @@ def listing_for_model_or_object(model, object, query, sort, sort_reverse, all, p
99110 sort_reverse = 'true'
100111 end
101112
102- model_name = model . model . name
103-
113+ ar_model = model . model
104114 current_page = page . presence || '1'
105115
106- versions = version_class_for ( model_name ) . where item_type : model_name
116+ versions = version_class_for ( ar_model ) . where item_type : ar_model . name
107117 versions = versions . where item_id : object . id if object
108118 versions = versions . where ( 'event LIKE ?' , "%#{ query } %" ) if query . present?
109119 versions = versions . order ( sort_reverse == 'true' ? "#{ sort } DESC" : sort )
@@ -116,12 +126,14 @@ def listing_for_model_or_object(model, object, query, sort, sort_reverse, all, p
116126 paginated_proxies
117127 end
118128
119- def version_class_for ( model_name )
120- klass = model_name . constantize .
121- try ( :version_class_name ) .
122- try ( :constantize )
123-
124- klass || @version_class
129+ # PT can be configured to use [custom version
130+ # classes](https://github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)
131+ #
132+ # ```ruby
133+ # has_paper_trail class_name: 'MyVersion'
134+ # ```
135+ def version_class_for ( model )
136+ model . paper_trail_options [ :class_name ] . try ( :constantize ) || @version_class
125137 end
126138 end
127139 end
0 commit comments