ActiveRecord::Base#reload should clear dirty attributes. [#231 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
parent
6e3521e613
commit
262d23d763
|
@ -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
|
||||
|
|
|
@ -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?
|
||||
|
|
Loading…
Reference in New Issue