diff options
author | Pratik Naik <pratiknaik@gmail.com> | 2010-11-02 01:42:47 +0000 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2010-11-02 01:42:49 +0000 |
commit | e911ed1f0f1633b0ae1b5146805eee6388b1f02f (patch) | |
tree | 3b965b11bb7925623d2d7f23f90e3f1391be0a36 | |
parent | c5c2e4fefde539e1c1753d4ca184c3bf81d496be (diff) | |
download | rails-e911ed1f0f1633b0ae1b5146805eee6388b1f02f.tar.gz rails-e911ed1f0f1633b0ae1b5146805eee6388b1f02f.tar.bz2 rails-e911ed1f0f1633b0ae1b5146805eee6388b1f02f.zip |
Ensure save always updates timestamps when serialized attributes are present
-rw-r--r-- | activerecord/lib/active_record/attribute_methods/dirty.rb | 4 | ||||
-rw-r--r-- | activerecord/test/cases/dirty_test.rb | 14 |
2 files changed, 18 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/attribute_methods/dirty.rb b/activerecord/lib/active_record/attribute_methods/dirty.rb index 439880c1fa..78a941b5d4 100644 --- a/activerecord/lib/active_record/attribute_methods/dirty.rb +++ b/activerecord/lib/active_record/attribute_methods/dirty.rb @@ -41,6 +41,10 @@ module ActiveRecord end end + def changed? + super || (attributes.keys & self.class.serialized_attributes.keys).present? + end + private # Wrap write_attribute to remember original attribute value. def write_attribute(attr, value) diff --git a/activerecord/test/cases/dirty_test.rb b/activerecord/test/cases/dirty_test.rb index bde93d1c85..b1a54af192 100644 --- a/activerecord/test/cases/dirty_test.rb +++ b/activerecord/test/cases/dirty_test.rb @@ -395,6 +395,20 @@ class DirtyTest < ActiveRecord::TestCase end end + def test_save_always_should_update_timestamps_when_serialized_attributes_are_present + with_partial_updates(Topic) do + topic = Topic.create!(:content => {:a => "a"}) + topic.save! + + updated_at = topic.updated_at + topic.content[:hello] = 'world' + topic.save! + + assert_not_equal updated_at, topic.updated_at + assert_equal 'world', topic.content[:hello] + end + end + def test_save_should_not_save_serialized_attribute_with_partial_updates_if_not_present with_partial_updates(Topic) do Topic.create!(:author_name => 'Bill', :content => {:a => "a"}) |