LoginSignup
0
0

More than 5 years have passed since last update.

Rails5.1以降でIDにhas_secure_token

Last updated at Posted at 2019-01-18

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

0
0
0

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