Skip to content

Commit 6e6764b

Browse files
committed
Merge pull request rails#4346 from pyromaniac/master
Nil values uniquines validation
2 parents 432a95d + 5a4cdf9 commit 6e6764b

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

activerecord/lib/active_record/validations/uniqueness.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ def find_finder_class_for(record) #:nodoc:
5252

5353
def build_relation(klass, table, attribute, value) #:nodoc:
5454
column = klass.columns_hash[attribute.to_s]
55-
value = column.limit ? value.to_s[0, column.limit] : value.to_s if column.text?
55+
value = column.limit ? value.to_s[0, column.limit] : value.to_s if !value.nil? && column.text?
5656

5757
if !options[:case_sensitive] && value && column.text?
5858
# will use SQL LOWER function before comparison, unless it detects a case insensitive collation
5959
relation = klass.connection.case_insensitive_comparison(table, attribute, column, value)
6060
else
61-
value = klass.connection.case_sensitive_modifier(value)
61+
value = klass.connection.case_sensitive_modifier(value) unless value.nil?
6262
relation = table[attribute].eq(value)
6363
end
6464

activerecord/test/cases/validations/uniqueness_validation_test.rb

+12
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,18 @@ def test_validate_uniqueness
4545
assert t2.save, "Should now save t2 as unique"
4646
end
4747

48+
def test_validates_uniqueness_with_nil_value
49+
Topic.validates_uniqueness_of(:title)
50+
51+
t = Topic.new("title" => nil)
52+
assert t.save, "Should save t as unique"
53+
54+
t2 = Topic.new("title" => nil)
55+
assert !t2.valid?, "Shouldn't be valid"
56+
assert !t2.save, "Shouldn't save t2 as unique"
57+
assert_equal ["has already been taken"], t2.errors[:title]
58+
end
59+
4860
def test_validates_uniqueness_with_validates
4961
Topic.validates :title, :uniqueness => true
5062
Topic.create!('title' => 'abc')

0 commit comments

Comments
 (0)