Rails5.1以降でIDにhas_secure_tokenを使う
初投稿です。
間違えなどあればご指摘お願いいたします。
よろしくお願いいたします。
作品を制作しているときにURLにID、例えば「edit/1」などの値が載っていることが見た目上かっこよくないなと思い
Rails5.1から実装された「has_secure_token」を使用してIDにUUIDを設定していこうと思います。
URLにIDが載ることは同じですが、IDを数値ではなく生成された重複しないIDを設定することで
URLの見栄えもよくあると思います。
多くの方法があると思いますが、自分がやってみたやり方で共感していただければ嬉しいです。
早速モデルの生成を行います。
そうすると
少し省略しますが、
userを作成したとします。
model/user.rb
migrate/xxxxxxx_create_users.rb
このようなファイルができますね。
まずuser.rbから変更しましょう。
はい。
user.rb
class User < ApplicationRecord
...
#has_secure_token使用する
#:idはは明示的にid列にトークンを入れますよってことです
# idにpresence: trueをするとエラーになるので注意
#DBにINSERTされた時の自動で挿入されます
has_secure_token :id:
...
end
xxxxxxx_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users, id: false do |t|
#has_secure_tokenはデフォルトで24文字を生成します。
t.string :id, primary_key: true, limit: 24
...
end
end
end
上記のように書きます。
「id: false」でいつも自動で生成されるIDを生成しないようにします。
そして、独自のIDを制作します。
この時のprimary_keyとなる命名は固定されているため特に理由がない場合は「id」を使うことをお勧めします。
以上の作業で作成できると思います。
お力になれていたら幸いです。
閲覧ありがとうございます。
参考
http://www.tom08.net/entry/2017/07/06/225859
https://qiita.com/mitz/items/9dbf5017a48f5961a596