diff options
author | Tom Ward <tom@popdog.net> | 2008-07-19 09:58:09 +0100 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2008-07-19 16:14:39 +0100 |
commit | f2059393481ceb632abc7a9d92670e409020d5bd (patch) | |
tree | 42dc11440ca28e59d2c49b9e2bde61ee98ce23e1 | |
parent | cab168ac9bbe24e5842fb7677d3fac820ddbc18c (diff) | |
download | rails-f2059393481ceb632abc7a9d92670e409020d5bd.tar.gz rails-f2059393481ceb632abc7a9d92670e409020d5bd.tar.bz2 rails-f2059393481ceb632abc7a9d92670e409020d5bd.zip |
Ensure checked value is a string when validating case-sensitive uniqueness [#361 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
-rwxr-xr-x | activerecord/lib/active_record/validations.rb | 2 | ||||
-rwxr-xr-x | activerecord/test/cases/validations_test.rb | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/validations.rb b/activerecord/lib/active_record/validations.rb index 3eec1305e4..b957ee3b9e 100755 --- a/activerecord/lib/active_record/validations.rb +++ b/activerecord/lib/active_record/validations.rb @@ -664,7 +664,7 @@ module ActiveRecord # As MySQL/Postgres don't have case sensitive SELECT queries, we try to find duplicate # column in ruby when case sensitive option if configuration[:case_sensitive] && finder_class.columns_hash[attr_name.to_s].text? - found = results.any? { |a| a[attr_name.to_s] == value } + found = results.any? { |a| a[attr_name.to_s] == value.to_s } end if found diff --git a/activerecord/test/cases/validations_test.rb b/activerecord/test/cases/validations_test.rb index 60b00b3e8f..4b2d28c80b 100755 --- a/activerecord/test/cases/validations_test.rb +++ b/activerecord/test/cases/validations_test.rb @@ -477,6 +477,15 @@ class ValidationsTest < ActiveRecord::TestCase assert_not_equal "has already been taken", t3.errors.on(:title) end + def test_validate_case_sensitive_uniqueness_with_attribute_passed_as_integer + Topic.validates_uniqueness_of(:title, :case_sensitve => true) + t = Topic.create!('title' => 101) + + t2 = Topic.new('title' => 101) + assert !t2.valid? + assert t2.errors.on(:title) + end + def test_validate_uniqueness_with_non_standard_table_names i1 = WarehouseThing.create(:value => 1000) assert !i1.valid?, "i1 should not be valid" |