Method: ActiveRecord::ConnectionAdapters::SchemaStatements#column_exists?
- Defined in:
- activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
#column_exists?(table_name, column_name, type = nil, **options) ⇒ Boolean
Checks to see if a column exists in a given table.
# Check a column exists
column_exists?(:suppliers, :name)
# Check a column exists of a particular type
#
# This works for standard non-casted types (eg. string) but is unreliable
# for types that may get cast to something else (eg. char, bigint).
column_exists?(:suppliers, :name, :string)
# Check a column exists with a specific definition
column_exists?(:suppliers, :name, :string, limit: 100)
column_exists?(:suppliers, :name, :string, default: 'default')
column_exists?(:suppliers, :name, :string, null: false)
column_exists?(:suppliers, :tax, :decimal, precision: 8, scale: 2)
132 133 134 135 136 137 138 139 140 141 142 |
# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb', line 132 def column_exists?(table_name, column_name, type = nil, **) column_name = column_name.to_s checks = [] checks << lambda { |c| c.name == column_name } checks << lambda { |c| c.type == type.to_sym rescue nil } if type .each do |attr| checks << lambda { |c| c.send(attr) == [attr] } if .key?(attr) end columns(table_name).any? { |c| checks.all? { |check| check[c] } } end |