diff options
author | Christian Seiler <chr.seiler@gmail.com> | 2012-08-16 23:19:47 +0200 |
---|---|---|
committer | Christian Seiler <chr.seiler@gmail.com> | 2012-10-16 15:09:23 +0200 |
commit | fb665217723f7c4e9e96bb7658fc3048a1d64379 (patch) | |
tree | b4fd3448e9f2100a88c183ba26e65284fd098944 /activerecord | |
parent | da1aa759b0004e058a60229bb6cbf3363887d498 (diff) | |
download | rails-fb665217723f7c4e9e96bb7658fc3048a1d64379.tar.gz rails-fb665217723f7c4e9e96bb7658fc3048a1d64379.tar.bz2 rails-fb665217723f7c4e9e96bb7658fc3048a1d64379.zip |
Call super to nullify the reference to the original errors object in the dup'ed object (call ActiveModel::Validations#initialize_dup). Closes #7291
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 5 | ||||
-rw-r--r-- | activerecord/lib/active_record/timestamp.rb | 1 | ||||
-rw-r--r-- | activerecord/test/cases/dup_test.rb | 14 |
3 files changed, 20 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 9abfe2e6fd..6e0f1f31dd 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -269,6 +269,11 @@ *Ari Pollak* +* 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* + * Raise `ArgumentError` if list of attributes to change is empty in `update_all`. *Roman Shatsov* diff --git a/activerecord/lib/active_record/timestamp.rb b/activerecord/lib/active_record/timestamp.rb index bf95ccb298..dd08a6f4f5 100644 --- a/activerecord/lib/active_record/timestamp.rb +++ b/activerecord/lib/active_record/timestamp.rb @@ -42,6 +42,7 @@ module ActiveRecord def initialize_dup(other) # :nodoc: clear_timestamp_attributes + super end private diff --git a/activerecord/test/cases/dup_test.rb b/activerecord/test/cases/dup_test.rb index 71b2b16608..4e2adff344 100644 --- a/activerecord/test/cases/dup_test.rb +++ b/activerecord/test/cases/dup_test.rb @@ -107,5 +107,19 @@ module ActiveRecord assert Topic.after_initialize_called 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 |