From 122ea7a7145d0eddc25589379207ae7ca025137e Mon Sep 17 00:00:00 2001 From: Adam Meehan Date: Sat, 11 Sep 2010 08:08:04 +1000 Subject: [PATCH] change to uniquness validator check from exists? to count > 0 to prevent record instantiation --- .../lib/active_record/validations/uniqueness.rb | 2 +- .../validations/uniqueness_validation_test.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletions(-) diff --git a/activerecord/lib/active_record/validations/uniqueness.rb b/activerecord/lib/active_record/validations/uniqueness.rb index cb1d2ae..cb6c3c4 100644 --- a/activerecord/lib/active_record/validations/uniqueness.rb +++ b/activerecord/lib/active_record/validations/uniqueness.rb @@ -36,7 +36,7 @@ module ActiveRecord relation = relation.where("#{record.class.quoted_table_name}.#{record.class.primary_key} <> ?", record.send(:id)) end - if relation.exists? + if relation.count > 0 record.errors.add(attribute, :taken, options.except(:case_sensitive, :scope).merge(:value => value)) end end diff --git a/activerecord/test/cases/validations/uniqueness_validation_test.rb b/activerecord/test/cases/validations/uniqueness_validation_test.rb index 9a863c2..57f9bbe 100644 --- a/activerecord/test/cases/validations/uniqueness_validation_test.rb +++ b/activerecord/test/cases/validations/uniqueness_validation_test.rb @@ -12,6 +12,12 @@ class Topic has_many :silly_unique_replies, :dependent => :destroy, :foreign_key => "parent_id" end +class TopicWithAfterInitialize < Topic + validates_uniqueness_of(:title) + + after_initialize { author_email_address.present? } +end + class UniqueReply < Reply validates_uniqueness_of :content, :scope => 'parent_id' end @@ -280,4 +286,11 @@ class UniquenessValidationTest < ActiveRecord::TestCase assert w6.errors[:city].any?, "Should have errors for city" assert_equal ["has already been taken"], w6.errors[:city], "Should have uniqueness message for city" end + + def test_validate_uniqueness_with_after_initialize + t1 = TopicWithAfterInitialize.create(:title => "I'm unique!") + + t2 = TopicWithAfterInitialize.new(:title => "I'm unique!") + assert !t2.valid?, "Shouldn't be valid" + end end -- 1.6.5