🐁

Ridgepole + MySQLでUUIDを扱う方法

2023/11/01に公開

概要

UUIDを主キーに使用したいという場面が以前からありました。
RidgepoleでUUIDを指定するのが出来ず四苦八苦し、基本的には以下の記事を参考に、Concernを使用し、アプリ側でUUIDを生成し保存するようにしておりました

https://qiita.com/ryokkkke/items/eb21a757cc058e8ffdc3

mariadb

create_table :accounts, id: :string, limit: 36, default: -> { 'UUID()' } do |t|
  t.integer :status, null: false, default: 1
  t.string :email, null: false
  t.index :email, unique: true
  t.string :password_hash
end

MySQL

create_table :accounts, id: :string, limit: 36, default: -> { '(UUID())' } do |t|
  t.integer :status, null: false, default: 1
  t.string :email, null: false
  t.index :email, unique: true
  t.string :password_hash
end

こうすることで、MySQL上のUUID関数を自動実行して保存してくれるようになった
default: 'UUID()'ではただ単なる UUID() という文字列が保存されるだけなのでご注意を

余談

mariadbとMySQLで構文違うのどうにかしてほしい…
mariadbってMySQLの互換じゃなかったっけ?…

Discussion