Method: ActiveRecord::ConnectionAdapters::SchemaStatements#index_exists?
- Defined in:
- activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
#index_exists?(table_name, column_name, options = {}) ⇒ Boolean
Checks to see if an index exists on a table for a given index definition.
# Check an index exists
index_exists?(:suppliers, :company_id)
# Check an index on multiple columns exists
index_exists?(:suppliers, [:company_id, :company_type])
# Check a unique index exists
index_exists?(:suppliers, :company_id, unique: true)
# Check an index with a custom name exists
index_exists?(:suppliers, :company_id, name: "idx_company_id")
100 101 102 103 104 105 106 107 108 |
# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb', line 100 def index_exists?(table_name, column_name, = {}) column_names = Array(column_name).map(&:to_s) checks = [] checks << lambda { |i| Array(i.columns) == column_names } checks << lambda { |i| i.unique } if [:unique] checks << lambda { |i| i.name == [:name].to_s } if [:name] indexes(table_name).any? { |i| checks.all? { |check| check[i] } } end |