Skip to content

Commit fafb6de

Browse files
authored
Merge pull request rails#49483 from fatkodima/fix-uniq-validation-for-expr-indexes
Fix uniqueness validation to correctly work with expression indexes
2 parents ec310b9 + ef1968b commit fafb6de

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

activerecord/lib/active_record/validations/uniqueness.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def covered_by_unique_index?(klass, record, attribute, scope)
8787
klass.connection.schema_cache.indexes(klass.table_name).any? do |index|
8888
index.unique &&
8989
index.where.nil? &&
90-
(index.columns - attributes).empty?
90+
(Array(index.columns) - attributes).empty?
9191
end
9292
end
9393

activerecord/test/cases/validations/uniqueness_validation_test.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,20 @@ def test_index_of_columns_list_and_extra_columns
812812
t.valid?
813813
end
814814
end
815+
816+
if current_adapter?(:PostgreSQLAdapter)
817+
def test_expression_index
818+
Topic.validates_uniqueness_of(:title)
819+
@connection.add_index(:topics, "LOWER(title)", unique: true, name: :topics_index)
820+
821+
t = Topic.create!(title: "abc", author_name: "John")
822+
t.content = "hello world"
823+
824+
assert_queries(1) do
825+
t.valid?
826+
end
827+
end
828+
end
815829
end
816830

817831
class UniquenessWithCompositeKey < ActiveRecord::TestCase

0 commit comments

Comments
 (0)