aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2013-12-27 11:15:19 -0800
committerYves Senn <yves.senn@gmail.com>2013-12-27 11:15:19 -0800
commit4fd3204a048b0c2dea0620e96f989a305f052629 (patch)
tree16ad7e04910731f7089227dde19301caf5878f72 /activerecord
parentb33555d3ef26dbe07472c9e1d23f3a6e49a35059 (diff)
parentb7bf025374324c2b73b3ab270cd4153f18a942b0 (diff)
downloadrails-4fd3204a048b0c2dea0620e96f989a305f052629.tar.gz
rails-4fd3204a048b0c2dea0620e96f989a305f052629.tar.bz2
rails-4fd3204a048b0c2dea0620e96f989a305f052629.zip
Merge pull request #13474 from jdelStrother/becomes
Copy changed_attributes across to newly become'd records
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/persistence.rb1
-rw-r--r--activerecord/test/cases/persistence_test.rb14
2 files changed, 15 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/persistence.rb b/activerecord/lib/active_record/persistence.rb
index 0cd5c09399..309bb980e3 100644
--- a/activerecord/lib/active_record/persistence.rb
+++ b/activerecord/lib/active_record/persistence.rb
@@ -181,6 +181,7 @@ module ActiveRecord
became = klass.new
became.instance_variable_set("@attributes", @attributes)
became.instance_variable_set("@attributes_cache", @attributes_cache)
+ became.instance_variable_set("@changed_attributes", @changed_attributes)
became.instance_variable_set("@new_record", new_record?)
became.instance_variable_set("@destroyed", destroyed?)
became.instance_variable_set("@errors", errors)
diff --git a/activerecord/test/cases/persistence_test.rb b/activerecord/test/cases/persistence_test.rb
index 6cd3e2154e..6f1e518f45 100644
--- a/activerecord/test/cases/persistence_test.rb
+++ b/activerecord/test/cases/persistence_test.rb
@@ -152,6 +152,20 @@ class PersistenceTest < ActiveRecord::TestCase
assert_equal original_errors, client.errors
end
+ def test_dupd_becomes_persists_changes_from_the_original
+ original = topics(:first)
+ copy = original.dup.becomes(Reply)
+ copy.save!
+ assert_equal "The First Topic", Topic.find(copy.id).title
+ end
+
+ def test_becomes_includes_changed_attributes
+ company = Company.new(name: "37signals")
+ client = company.becomes(Client)
+ assert_equal "37signals", client.name
+ assert_equal %w{name}, client.changed
+ end
+
def test_delete_many
original_count = Topic.count
Topic.delete(deleting = [1, 2])