aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorPiotr Sarnacki <drogus@gmail.com>2012-05-19 21:49:55 -0700
committerPiotr Sarnacki <drogus@gmail.com>2012-05-19 21:49:55 -0700
commitf7d01ecf753ab8db3ba1b0a10586590b0855a31a (patch)
treef45fe9618360aee66dcb85c088d424c8597fefc6 /activerecord/lib/active_record
parentc5205041f65206a1490063b08915e7b2a2151a61 (diff)
downloadrails-f7d01ecf753ab8db3ba1b0a10586590b0855a31a.tar.gz
rails-f7d01ecf753ab8db3ba1b0a10586590b0855a31a.tar.bz2
rails-f7d01ecf753ab8db3ba1b0a10586590b0855a31a.zip
Fix `validates_uniqueness_off :field, :allow_nil => false`
Closes (#5853) Uniqueness validator was not properly checking if there are any existing records, when value was `nil` and column was text type. `nil` was converted to string, which resulted in queries looking like: ```sql SELECT 1 FROM "posts" WHERE "posts"."title" = '' LIMIT 1 ``` instead of ```sql SELECT 1 FROM "posts" WHERE "posts"."title" IS NULL LIMIT 1 ```
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/validations/uniqueness.rb4
1 files changed, 2 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/validations/uniqueness.rb b/activerecord/lib/active_record/validations/uniqueness.rb
index 2e2ea8c42b..2e2bcec922 100644
--- a/activerecord/lib/active_record/validations/uniqueness.rb
+++ b/activerecord/lib/active_record/validations/uniqueness.rb
@@ -54,7 +54,7 @@ module ActiveRecord
def build_relation(klass, table, attribute, value) #:nodoc:
column = klass.columns_hash[attribute.to_s]
- value = column.limit ? value.to_s.mb_chars[0, column.limit] : value.to_s if column.text?
+ value = column.limit ? value.to_s.mb_chars[0, column.limit] : value.to_s if value && column.text?
if !options[:case_sensitive] && value && column.text?
# will use SQL LOWER function before comparison, unless it detects a case insensitive collation
@@ -81,7 +81,7 @@ module ActiveRecord
#
# class Person < ActiveRecord::Base
# validates_uniqueness_of :user_name, :scope => :account_id
- # end
+ # end
#
# Or even multiple scope parameters. For example, making sure that a teacher can only be on the schedule once
# per semester for a particular class.