diff options
author | Tom Lea <contrib@tomlea.co.uk> | 2008-08-11 18:16:58 +0100 |
---|---|---|
committer | Michael Koziarski <michael@koziarski.com> | 2008-08-12 18:15:50 +0200 |
commit | 992fda16ed662f028700d63a8dcbd1837f1d58ab (patch) | |
tree | 71fc235f3141b4ae5be912c77b8830a82290fb6b /activerecord | |
parent | 81c12d1f6359eb5e52b376f1f3552097a144cc8b (diff) | |
download | rails-992fda16ed662f028700d63a8dcbd1837f1d58ab.tar.gz rails-992fda16ed662f028700d63a8dcbd1837f1d58ab.tar.bz2 rails-992fda16ed662f028700d63a8dcbd1837f1d58ab.zip |
Serialized attributes will now always be saved even with partial_updates turned on.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#788 state:committed]
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/dirty.rb | 4 | ||||
-rw-r--r-- | activerecord/test/cases/dirty_test.rb | 12 |
2 files changed, 15 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/dirty.rb b/activerecord/lib/active_record/dirty.rb index 4ce0356457..63bf8c8f5b 100644 --- a/activerecord/lib/active_record/dirty.rb +++ b/activerecord/lib/active_record/dirty.rb @@ -134,7 +134,9 @@ module ActiveRecord def update_with_dirty if partial_updates? - update_without_dirty(changed) + # Serialized attributes should always be written in case they've been + # changed in place. + update_without_dirty(changed | self.class.serialized_attributes.keys) else update_without_dirty end diff --git a/activerecord/test/cases/dirty_test.rb b/activerecord/test/cases/dirty_test.rb index e5e022050d..feb47a15a8 100644 --- a/activerecord/test/cases/dirty_test.rb +++ b/activerecord/test/cases/dirty_test.rb @@ -191,6 +191,18 @@ class DirtyTest < ActiveRecord::TestCase assert !pirate.changed? end + def test_save_should_store_serialized_attributes_even_with_partial_updates + with_partial_updates(Topic) do + topic = Topic.create!(:content => {:a => "a"}) + topic.content[:b] = "b" + #assert topic.changed? # Known bug, will fail + topic.save! + assert_equal "b", topic.content[:b] + topic.reload + assert_equal "b", topic.content[:b] + end + end + private def with_partial_updates(klass, on = true) old = klass.partial_updates? |