Spec-Zone.ru › Ruby on Rails 5.1

модуль ActiveRecord::ConnectionAdapters::ColumnDumper

Цель данного модуля — перенести определения столбцов, специфичные для адаптера, в адаптер вместо схемы. Данный код представляет собой стандартный случай. Затем мы можем переопределить, как определённые типы данных обрабатываются в схеме на уровне адаптера, переписав этот код внутри адаптеров, специфичных для базы данных.

Открытые методы экземпляров

column_spec(column) Показать исходный код
# 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
column_spec_for_primary_key(column) Показать исходный код
# 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
prepare_column_options(column) Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API