Skip to content
Browse files

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>
  • Loading branch information...
1 parent ade756f commit 6b4e0cc526f55b5532cf99292c94f0a4db53b16f @fbrubacher fbrubacher committed with josevalim
View
9 activemodel/lib/active_model/dirty.rb
@@ -124,11 +124,12 @@ def previous_changes
@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)
View
1 activerecord/lib/active_record/base.rb
@@ -1467,6 +1467,7 @@ def initialize_copy(other)
@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
View
9 activerecord/test/cases/dirty_test.rb
@@ -338,6 +338,15 @@ def test_reload_should_clear_changed_attributes
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)

0 comments on commit 6b4e0cc

Please sign in to comment.
Something went wrong with that request. Please try again.