投稿がフロントに偏ってたので
バックエンドの方も少し書いておこうと思う
ちなみに今回、新規テーブル Postgresql がターゲットになると思う。
mysql だとちょっと泣きを見るかも
UUIDって何よ
まずUUIDとは「絶対かぶらないID」だと思えばいい
ビックデータ や ディープラーニング等の統計処理
サードパティーとのデータ連携
いろんなデータがごちゃまぜに利用される中、システムないおよびテーブル内でユニークであることはもちろん、共有システムの全テーブル中でも常に一意のデータを指し示す事ができる。
それがUUIDだ(と思う)
ログデータや、コンテンツ、ユーザ情報など重要な情報にはこれを付与しておくのは悪い手ではないと思う。
独自の採番ロジックを使うコストを払うより、この辺りは標準使うほうが良い場合もあるはず。
UUIDの問題点
としてよくあげられるのが「長い」ということ。
実際URLにいくつも入ってきたら見た目が悪い。
これに関しては、
- UIDをBase64で圧縮する
- 表示用に別のidを用意しておく
等の手がある。
では本題にうつる。
Rails4 にUUIDを導入する。
UUIDを導入するには大きくどちらかを選ぼう
1. Gemを使う
2. Rails標準の機能を使う
Postgresを利用しているならば、Rails標準一択でよいと思う
他のDBMSを利用しているならば古いGemとの格闘を覚悟しよう
Gemを使う
https://github.com/jashmenn/activeuuid
railsでuuidを扱うgemはいくつかある。
... しかしどれも古い。
使ってみてメッチャ嵌った。
結局
SecureRandom.uuid
を利用して地道に書くのがいい気がする。
私は途中で投げ出してPostgresに逃げた
Rails標準の機能を使う
楽、メッチャ楽。
まずPostgresqlにUUIDを有効にする命令を投げる必要がある。
$ rails generate migration enable_uuid_ossp_extension
生成されたmigrationを編集して
class EnableUuidOsspExtension < ActiveRecord::Migration
def change
enable_extension 'uuid-ossp'
end
end
次に新規のテーブルに導入する場合、
migrationファイルの create_table に id: :uuid と追加して
create_table :users, id: :uuid do |t|
外部キーの参照はこんな感じに設定
Before
t.references("user")
After
t.uuid :user_id
## polymorphic = true の場合
# t.string :user_type
これだけでたぶんうまくいくと思います!