модуль ActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods
Открытые методы экземпляра
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 57
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 61
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 65
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 137
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 69
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 149
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 73
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 77
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 81
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 85
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 93
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 97
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 89
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 101
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 129
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 133
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 105
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 109
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 113
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 117
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 121
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 141
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 125
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 145
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 48
def primary_key(name, type = :primary_key, **options)
if type == :uuid
options[:default] = options.fetch(:default, "gen_random_uuid()")
end
super
end Определяет поле первичного ключа. Поддерживается использование родного типа PostgreSQL UUID, и его можно использовать, определив ваши таблицы следующим образом:
create_table :stuffs, id: :uuid do |t| t.string :content t.timestamps end
По умолчанию, будет использована функция gen_random_uuid() из расширения pgcrypto. Так как это расширение доступно только в PostgreSQL 9.4 и выше, для более ранних версий можно явно задать значение по умолчанию, используя функцию uuid_generate_v4() из расширения uuid-ossp:
create_table :stuffs, id: false do |t| t.primary_key :id, :uuid, default: "uuid_generate_v4()" t.uuid :foo_id t.timestamps end
Для активации соответствующего расширения, которое является обязательным, используйте метод enable_extension в своих миграциях.
Для использования UUID первичного ключа без каких-либо расширений, установите опцию :default в nil:
create_table :stuffs, id: false do |t| t.primary_key :id, :uuid, default: nil t.uuid :foo_id t.timestamps end
Вы также можете передать пользовательскую хранимую процедуру, возвращающую UUID, или использовать другую функцию генерации UUID из другой библиотеки.
Обратите внимание, что установка значения по умолчанию UUID первичного ключа в nil потребует от вас обеспечения того, что вы всегда предоставляете значение UUID перед сохранением записи (так как первичные ключи не могут быть nil). Это можно сделать с помощью метода SecureRandom.uuid и обратного вызова before_save, например.
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 153
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 157
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 161
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 165
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 169
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 176
included do
define_column_methods :bigserial, :bit, :bit_varying, :cidr, :citext, :daterange,
:hstore, :inet, :interval, :int4range, :int8range, :jsonb, :ltree, :macaddr,
:money, :numrange, :oid, :point, :line, :lseg, :box, :path, :polygon, :circle,
:serial, :tsrange, :tstzrange, :tsvector, :uuid, :xml
end
© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.