Skip to content
Browse files

Merge pull request #14469 from tiegz/timestamp_inheritance_fix

Swap Timestamp/Callbacks order in ActiveRecord::Base
  • Loading branch information...
1 parent d6c704f commit 799a7bc806355f8943fc64bcc5d225c1278d1f9a @rafaelfranca rafaelfranca committed Mar 27, 2014
Showing with 23 additions and 1 deletion.
  1. +4 −0 activerecord/CHANGELOG.md
  2. +1 −1 activerecord/lib/active_record/base.rb
  3. +18 −0 activerecord/test/cases/timestamp_test.rb
View
4 activerecord/CHANGELOG.md
@@ -1,3 +1,7 @@
+* Make possible to change `record_timestamps` inside Callbacks.
+
+ *Tieg Zaharia*
+
* Fixed error where .persisted? throws SystemStackError for an unsaved model with a
custom primary key that didn't save due to validation error.
View
2 activerecord/lib/active_record/base.rb
@@ -310,8 +310,8 @@ class Base
include Locking::Optimistic
include Locking::Pessimistic
include AttributeMethods
- include Callbacks
include Timestamp
+ include Callbacks
include Associations
include ActiveModel::SecurePassword
include AutosaveAssociation
View
18 activerecord/test/cases/timestamp_test.rb
@@ -71,6 +71,24 @@ def test_saving_when_instance_record_timestamps_is_false_doesnt_update_its_times
assert_equal @previously_updated_at, @developer.updated_at
end
+ def test_saving_when_callback_sets_record_timestamps_to_false_doesnt_update_its_timestamp
+ klass = Class.new(Developer) do
+ before_update :cancel_record_timestamps
+ def cancel_record_timestamps
+ self.record_timestamps = false
+ return true
+ end
+ end
+
+ developer = klass.first
+ previously_updated_at = developer.updated_at
+
+ developer.name = "New Name"
+ developer.save!
+
+ assert_equal previously_updated_at, developer.updated_at
+ end
+
def test_touching_an_attribute_updates_timestamp
previously_created_at = @developer.created_at
@developer.touch(:created_at)

0 comments on commit 799a7bc

Please sign in to comment.
Something went wrong with that request. Please try again.