ActiveRecord::Base#reload should clear dirty attributes. [#231 state:resolved]

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
Ryan Bates 2008-05-21 08:27:20 -07:00 committed by Pratik Naik
parent 6e3521e613
commit 262d23d763
2 changed files with 16 additions and 0 deletions

View File

@ -40,6 +40,7 @@ module ActiveRecord
base.alias_method_chain :save, :dirty
base.alias_method_chain :save!, :dirty
base.alias_method_chain :update, :dirty
base.alias_method_chain :reload, :dirty
base.superclass_delegating_accessor :partial_updates
base.partial_updates = false
@ -84,6 +85,13 @@ module ActiveRecord
status
end
# <tt>reload</tt> the record and clears changed attributes.
def reload_with_dirty(*args) #:nodoc:
record = reload_without_dirty(*args)
changed_attributes.clear
record
end
private
# Map of change attr => original value.
def changed_attributes

View File

@ -137,6 +137,14 @@ class DirtyTest < ActiveRecord::TestCase
check_pirate_after_save_failure(pirate)
end
def test_reload_should_clear_changed_attributes
pirate = Pirate.create!(:catchphrase => "shiver me timbers")
pirate.catchphrase = "*hic*"
assert pirate.changed?
pirate.reload
assert !pirate.changed?
end
private
def with_partial_updates(klass, on = true)
old = klass.partial_updates?