aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSantiago Pastorino <santiago@wyeworks.com>2012-10-16 09:46:44 -0700
committerRafael Mendonça França <rafaelmfranca@gmail.com>2012-10-17 22:39:48 -0300
commit9a38e73c631f4358b4863849ec16c84f6c876225 (patch)
treebba083d7b399efe039daa522605b0fe7970aee9a
parentd92e66f14c137e112e1e7a714ddcb9dd9f7aec3e (diff)
downloadrails-9a38e73c631f4358b4863849ec16c84f6c876225.tar.gz
rails-9a38e73c631f4358b4863849ec16c84f6c876225.tar.bz2
rails-9a38e73c631f4358b4863849ec16c84f6c876225.zip
Merge pull request #7371 from csmuc/fix_dup_validation_errors
Dup'ed ActiveRecord objects may not share the errors object Conflicts: activerecord/CHANGELOG.md activerecord/test/cases/dup_test.rb
-rw-r--r--activerecord/CHANGELOG.md5
-rw-r--r--activerecord/lib/active_record/timestamp.rb1
-rw-r--r--activerecord/test/cases/dup_test.rb15
3 files changed, 21 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md
index 75f9d76730..aafdbec25c 100644
--- a/activerecord/CHANGELOG.md
+++ b/activerecord/CHANGELOG.md
@@ -1,5 +1,10 @@
## Rails 3.2.9 (unreleased)
+* Fix AR#dup to nullify the validation errors in the dup'ed object. Previously the original
+ and the dup'ed object shared the same errors.
+
+ * Christian Seiler*
+
* Synchronize around deleting from the reserved connections hash.
Fixes #7955
diff --git a/activerecord/lib/active_record/timestamp.rb b/activerecord/lib/active_record/timestamp.rb
index 0c760e9850..ab25dc52f9 100644
--- a/activerecord/lib/active_record/timestamp.rb
+++ b/activerecord/lib/active_record/timestamp.rb
@@ -39,6 +39,7 @@ module ActiveRecord
def initialize_dup(other)
clear_timestamp_attributes
+ super
end
private
diff --git a/activerecord/test/cases/dup_test.rb b/activerecord/test/cases/dup_test.rb
index 303f616c61..b2a3cb5733 100644
--- a/activerecord/test/cases/dup_test.rb
+++ b/activerecord/test/cases/dup_test.rb
@@ -98,5 +98,20 @@ module ActiveRecord
assert_not_nil new_topic.updated_at
assert_not_nil new_topic.created_at
end
+
+ def test_dup_validity_is_independent
+ Topic.validates_presence_of :title
+ topic = Topic.new("title" => "Litterature")
+ topic.valid?
+
+ duped = topic.dup
+ duped.title = nil
+ assert duped.invalid?
+
+ topic.title = nil
+ duped.title = 'Mathematics'
+ assert topic.invalid?
+ assert duped.valid?
+ end
end
end