概要
- ユーザーIDをUUIDにする必要性があったため、検証しました
サマリー
- UUID型のデータ型を持つ、PostgreSQLにすると簡単に対応が可能
- mysqlではUUIDを生成するところから実装して、データベースにUUIDを入れるような運用になります
ということで、今回は、PostgreSQLで検証を進めます。
手順
Railsガイドによるマニュアル
https://guides.rubyonrails.org/active_record_postgresql.html
こちらをベースに検証を進めました。
今回は、ユーザーテーブルに対して、プライマリーキーをUUIDにする、というケースで手順を記載します。
ユーザーモデルの作成
$ rails generate model User sub:string
※ column名は任意。今回は認証連携先のsubを格納する想定でsubとした。
マイグレーションファイルの修正
上記コマンドで、生成したマイグレーションファイルを修正します
class CreateUsers < ActiveRecord::Migration[7.0]
def change
enable_extension 'pgcrypto' unless extension_enabled?('pgcrypto')
create_table :users, id: :uuid do |t|
t.string :sub
t.timestamps
end
end
end
モデルファイルの変更は無し
データベースをマイグレーション
$ rails db:migrate
コンソールでユーザー作成してUUIDを確かめる
irb(main):001:0> user = User.create
TRANSACTION (9.5ms) BEGIN
User Create (14.4ms) INSERT INTO "users" ("sub", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["sub", nil], ["created_at", "2023-02-07 03:24:45.240076"], ["updated_at", "2023-02-07 03:24:45.240076"]]
TRANSACTION (14.5ms) COMMIT
=>
#<User:0x0000000107ba3760
...
irb(main):002:0> user.id
=> "6a19eebc-72f1-4e13-9e47-75025a8276af"
このように、IDがUUIDになりました!