aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Gillard <paulmgillard@gmail.com>2010-06-18 00:02:31 +0100
committerJosé Valim <jose.valim@gmail.com>2010-06-23 09:27:15 +0200
commitd132dd33520ba61f7bfa9ba6fdd1b7b2bebd27f3 (patch)
tree0795b088c14821af3ee1cc3d32e8c9402ce18e63
parentef7a04ea85783b94dfa033cdcd5269c125096684 (diff)
downloadrails-d132dd33520ba61f7bfa9ba6fdd1b7b2bebd27f3.tar.gz
rails-d132dd33520ba61f7bfa9ba6fdd1b7b2bebd27f3.tar.bz2
rails-d132dd33520ba61f7bfa9ba6fdd1b7b2bebd27f3.zip
Don't clone associations [#4894 state:resolved]
Cloning an active record object should be shallow in that it should copy attributes but not associations. This was no longer true as a result of #3164. Signed-off-by: José Valim <jose.valim@gmail.com>
-rw-r--r--activerecord/lib/active_record/base.rb1
-rw-r--r--activerecord/test/cases/base_test.rb8
2 files changed, 9 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index 3f81ca7555..3a7db97a6a 100644
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -1433,6 +1433,7 @@ module ActiveRecord #:nodoc:
end
clear_aggregation_cache
+ clear_association_cache
@attributes_cache = {}
@new_record = true
ensure_proper_type
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index 7c74d87b61..c24a494c85 100644
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -1401,6 +1401,14 @@ class BasicsTest < ActiveRecord::TestCase
assert_not_equal clone.id, dev.id
end
+ def test_clone_does_not_clone_associations
+ author = authors(:david)
+ assert_not_equal [], author.posts
+
+ author_clone = author.clone
+ assert_equal [], author_clone.posts
+ end
+
def test_clone_preserves_subtype
clone = nil
assert_nothing_raised { clone = Company.find(3).clone }