diff --git a/CHANGELOG.md b/CHANGELOG.md index 14751c8c1..36ff599e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## 4.2.0 (Unreleased) + +### Added + +- [#808](https://github.com/airblade/paper_trail/pull/808) - + Warn when destroy callback is set to :after with ActiveRecord 5 + option `belongs_to_required_by_default` set to `true`. + ## 4.1.0 ### Breaking Changes diff --git a/lib/paper_trail/has_paper_trail.rb b/lib/paper_trail/has_paper_trail.rb index cffa5b087..28edd1dfb 100644 --- a/lib/paper_trail/has_paper_trail.rb +++ b/lib/paper_trail/has_paper_trail.rb @@ -120,9 +120,18 @@ def paper_trail_on_destroy(recording_order = 'after') fail ArgumentError, 'recording order can only be "after" or "before"' end - send "#{recording_order}_destroy", - :record_destroy, - :if => :save_version? + if recording_order.to_s == 'after' and + Gem::Version.new(ActiveRecord::VERSION::STRING).release >= Gem::Version.new("5") + if ::ActiveRecord::Base.belongs_to_required_by_default + ::ActiveSupport::Deprecation.warn( + "paper_trail_on_destroy(:after) is incompatible with ActiveRecord " + + "belongs_to_required_by_default and has no effect. Please use :before " + + "or disable belongs_to_required_by_default." + ) + end + end + + send "#{recording_order}_destroy", :record_destroy, :if => :save_version? return if paper_trail_options[:on].include?(:destroy) paper_trail_options[:on] << :destroy