From aab06b3b3b6134e1aec0811291400ff1401f1647 Mon Sep 17 00:00:00 2001 From: Arthur Klepchukov Date: Tue, 23 Dec 2008 23:35:17 -0500 Subject: [PATCH] validates_uniqueness_of now takes a text column's limit into account --- activerecord/lib/active_record/validations.rb | 3 ++- activerecord/test/cases/validations_test.rb | 9 +++++++++ activerecord/test/models/event.rb | 3 +++ activerecord/test/schema/schema.rb | 4 ++++ 4 files changed, 18 insertions(+), 1 deletions(-) create mode 100644 activerecord/test/models/event.rb diff --git a/activerecord/lib/active_record/validations.rb b/activerecord/lib/active_record/validations.rb index 6a9690b..a69adb5 100644 --- a/activerecord/lib/active_record/validations.rb +++ b/activerecord/lib/active_record/validations.rb @@ -727,7 +727,8 @@ module ActiveRecord comparison_operator = "IS ?" elsif is_text_column comparison_operator = "#{connection.case_sensitive_equality_operator} ?" - value = value.to_s + limit = finder_class.columns_hash[attr_name.to_s].limit + value = (limit.nil?) ? value.to_s : value.to_s[0, limit] # nil for columns of type :text else comparison_operator = "= ?" end diff --git a/activerecord/test/cases/validations_test.rb b/activerecord/test/cases/validations_test.rb index 380d8ac..2d7df84 100644 --- a/activerecord/test/cases/validations_test.rb +++ b/activerecord/test/cases/validations_test.rb @@ -8,6 +8,7 @@ require 'models/warehouse_thing' require 'models/guid' require 'models/owner' require 'models/pet' +require 'models/event' # The following methods in Topic are used in test_conditional_validation_* class Topic @@ -529,6 +530,14 @@ class ValidationsTest < ActiveRecord::TestCase assert_nothing_raised { !g.valid? } end end + + def test_validate_uniqueness_with_limit + # Event.title is limited to 5 characters + e1 = Event.create(:title => "abcde") + assert e1.valid?, "Could not create an event with a unique, 5 character title" + e2 = Event.create(:title => "abcdefgh") + assert !e2.valid?, "Created an event whose title, with limit taken into account, is not unique" + end def test_validate_straight_inheritance_uniqueness w1 = IneptWizard.create(:name => "Rincewind", :city => "Ankh-Morpork") diff --git a/activerecord/test/models/event.rb b/activerecord/test/models/event.rb new file mode 100644 index 0000000..99fa0fe --- /dev/null +++ b/activerecord/test/models/event.rb @@ -0,0 +1,3 @@ +class Event < ActiveRecord::Base + validates_uniqueness_of :title +end \ No newline at end of file diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index fbacc69..80fb24a 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -150,6 +150,10 @@ ActiveRecord::Schema.define do t.integer :course_id, :null => false end + create_table :events, :force => true do |t| + t.string :title, :limit => 5 + end + create_table :funny_jokes, :force => true do |t| t.string :name end -- 1.5.3.7