LoginSignup
0
0

More than 1 year has passed since last update.

【Rails】UUIDをプライマリーキーにする

Last updated at Posted at 2023-02-08

概要

  • ユーザー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になりました!

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0