diff options
author | Federico Brubacher <fbrubacher@gmail.com> | 2010-05-16 07:24:41 -0300 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2010-05-16 23:04:40 +0200 |
commit | 6b4e0cc526f55b5532cf99292c94f0a4db53b16f (patch) | |
tree | 3a01741b220863bcd701f0b00e6ce0145cb33f06 | |
parent | ade756fe42423033bae8e5aea8f58782f7a6c517 (diff) | |
download | rails-6b4e0cc526f55b5532cf99292c94f0a4db53b16f.tar.gz rails-6b4e0cc526f55b5532cf99292c94f0a4db53b16f.tar.bz2 rails-6b4e0cc526f55b5532cf99292c94f0a4db53b16f.zip |
a cloned object no longer mimics changed flags from creator , plus a test case [#4614 state:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
-rw-r--r-- | activemodel/lib/active_model/dirty.rb | 9 | ||||
-rwxr-xr-x | activerecord/lib/active_record/base.rb | 1 | ||||
-rw-r--r-- | activerecord/test/cases/dirty_test.rb | 9 |
3 files changed, 15 insertions, 4 deletions
diff --git a/activemodel/lib/active_model/dirty.rb b/activemodel/lib/active_model/dirty.rb index a7ee15a7f6..bbcc345e4b 100644 --- a/activemodel/lib/active_model/dirty.rb +++ b/activemodel/lib/active_model/dirty.rb @@ -124,11 +124,12 @@ module ActiveModel @previously_changed end + # Map of change <tt>attr => original value</tt>. + def changed_attributes + @changed_attributes ||= {} + end + private - # Map of change <tt>attr => original value</tt>. - def changed_attributes - @changed_attributes ||= {} - end # Handle <tt>*_changed?</tt> for +method_missing+. def attribute_changed?(attr) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 04c474c9a1..c02af328c1 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1467,6 +1467,7 @@ module ActiveRecord #:nodoc: @attributes_cache = {} @new_record = true ensure_proper_type + @changed_attributes = other.changed_attributes.dup if scope = self.class.send(:current_scoped_methods) create_with = scope.scope_for_create diff --git a/activerecord/test/cases/dirty_test.rb b/activerecord/test/cases/dirty_test.rb index 7a17ef1ee0..3ea2948f62 100644 --- a/activerecord/test/cases/dirty_test.rb +++ b/activerecord/test/cases/dirty_test.rb @@ -338,6 +338,15 @@ class DirtyTest < ActiveRecord::TestCase assert !pirate.changed? end + def test_cloned_objects_should_not_copy_dirty_flag_from_creator + pirate = Pirate.create!(:catchphrase => "shiver me timbers") + pirate_clone = pirate.clone + pirate_clone.reset_catchphrase! + pirate.catchphrase = "I love Rum" + assert pirate.catchphrase_changed? + assert !pirate_clone.catchphrase_changed? + end + def test_reverted_changes_are_not_dirty phrase = "shiver me timbers" pirate = Pirate.create!(:catchphrase => phrase) |