модуль 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 184
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, :timestamptz, :enum
end # 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 177
# 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 173
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.