модуль ActiveRecord::ConnectionAdapters::ColumnDumper
Цель данного модуля — перенести определения столбцов, специфичные для адаптера, в адаптер вместо схемы. Данный код представляет собой стандартный случай. Затем мы можем переопределить, как определённые типы данных обрабатываются в схеме на уровне адаптера, переписав этот код внутри адаптеров, специфичных для базы данных.
Открытые методы экземпляров
# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 9 def column_spec(column) [schema_type_with_virtual(column), prepare_column_options(column)] end
# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 13
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))
spec[:default] ||= "nil" if explicit_primary_key_default?(column)
spec
end # File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 24
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.