модуль ActiveRecord::ConnectionAdapters::ColumnDumper
Цель данного модуля — перенести специфичные для адаптера определения столбцов в сам адаптер, вместо того, чтобы включать их в сам дампер схемы. Данный код представляет собой стандартный случай. Затем, мы можем переопределить, как определённые типы данных обрабатываются в дампере схемы на уровне адаптера, переопределяя данный код внутри адаптеров, специфичных для конкретной базы данных.
Публичные методы экземпляров
# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 9
def column_spec(column)
spec = Hash[prepare_column_options(column).map { |k, v| [k, "#{k}: #{v}"] }]
spec[:name] = column.name.inspect
spec[:type] = schema_type(column).to_s
spec
end # File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 16
def column_spec_for_primary_key(column)
return {} if default_primary_key?(column)
spec = { id: schema_type(column).inspect }
spec.merge!(prepare_column_options(column).except!(:null))
end # File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 55 def migration_keys [:name, :limit, :precision, :scale, :default, :null, :collation, :comment] end
Перечисляет допустимые параметры миграции
# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 25
def prepare_column_options(column)
spec = {}
if limit = schema_limit(column)
spec[:limit] = limit
end
if precision = schema_precision(column)
spec[:precision] = precision
end
if scale = schema_scale(column)
spec[:scale] = scale
end
default = schema_default(column) if column.has_default?
spec[:default] = default unless default.nil?
spec[:null] = 'false' unless column.null
if collation = schema_collation(column)
spec[:collation] = collation
end
spec[:comment] = column.comment.inspect if column.comment.present?
spec
end Это можно переопределить на уровне адаптера, чтобы поддерживать другие расширенные типы данных (например, добавление параметра массива в PostgreSQL::ColumnDumper)
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.