Skip to content

Commit

Permalink
Serialized attributes will now always be saved even with partial_upda…
Browse files Browse the repository at this point in the history
…tes turned on.

Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#788 state:committed]
  • Loading branch information
tomlea authored and NZKoz committed Aug 12, 2008
1 parent 81c12d1 commit 992fda1
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
4 changes: 3 additions & 1 deletion activerecord/lib/active_record/dirty.rb
Expand Up @@ -134,7 +134,9 @@ def write_attribute_with_dirty(attr, value)

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
Expand Down
12 changes: 12 additions & 0 deletions activerecord/test/cases/dirty_test.rb
Expand Up @@ -191,6 +191,18 @@ def test_reload_should_clear_changed_attributes
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?
Expand Down

0 comments on commit 992fda1

Please sign in to comment.