🐁
Ridgepole + MySQLでUUIDを扱う方法
概要
UUIDを主キーに使用したいという場面が以前からありました。
RidgepoleでUUIDを指定するのが出来ず四苦八苦し、基本的には以下の記事を参考に、Concernを使用し、アプリ側でUUIDを生成し保存するようにしておりました
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