Появилась задача — использовать в качестве первичного ключа таблицы в проекте на Phoenix поле с UUID-ом. Как оказалось в Phoenix существует готовое решение, которое к тому же ещё и нормально работает и позволяет решить задачу с минимальными усилиями.
Итак первым делом очевидно нужно что-то добавить в миграцию — указыаем, что у нас нет первичного ключа, чтобы отключить его автогенерацию и добавляем соответствующее поле.
1 | defmodule MyApp.Repo.Migrations.CreatePerson do |
Ну и затем нужно как-то сказать модели, чтобы в качестве идентификатора у нас генерировался UUID. Добавляем соответствующую конструкцию:
1 | defmodule MyApp.Person do |
Запускаем миграцию и видим, что поле у нас теперь типа uuid
, и при сохранении модели первичный ключ генерируется как UUID.
При создании связей в таблице с использованием UUID первичного ключа необходимо добавить type: :uuid
в параметры связи
1 | defmodule MyApp.Repo.Migrations.CreateTask do |
Крайне удивлён. Всё прошло настолько гладко, что до сих пор не покидает ощущение какого-то подвоха. Но чорт побери — оно работает!
Комментарии