module ActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods
Открытые методы экземпляра
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 60
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 64
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 68
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 140
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 72
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 152
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 76
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 80
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 84
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 88
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 96
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 100
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 92
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 104
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 132
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 136
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 108
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 112
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 116
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 120
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 124
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 144
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 128
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 148
# 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 156
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 160
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 164
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 168
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb, line 172
# 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–2019 David Heinemeier Hansson
Licensed under the MIT License.