LoginSignup
2
2

More than 5 years have passed since last update.

少ないユーザー数をバレないようにしよう

Posted at

はじめに

Railsは、デフォルトだとレコードに連番でidを付けます。

それだと、URLにその連番のidが出力されるため、自分が何番目のユーザーなのか、サービスで何本目の記事を書いたのかなどが露出してしまいます。

ユーザー数のサービスだと人気がないことがバレてしまうことも。。。

そこで、Railsで主キーをuuidにする方法をまとめました。

PostgreSQLの拡張を有効化

以下のRailsコマンドを実行してマイグレーションファイルを作成します。

rails g migration enable_extension_for_uuid

マイグレーションファイルに以下のように記入してください。

20190129024253_enable_extension_for_uuid.rb
class EnableExtensionForUuid < ActiveRecord::Migration[5.2]
  def change
    enable_extension 'pgcrypto' unless extension_enabled?('pgcrypto')
  end
end

初期化処理を追加

アプリケーション起動時にロードされる初期化処理に以下の内容を加えます。

config/initializers/generators.rb

Rails.application.config.generators do |g|
  g.orm :active_record, primary_key_type: :uuid
end

設定内容を読みこませる必要がありますので、ここで必ずRailsを再起動して下さい。

再起動後にマイグレーションコマンドを実行します。

rails db:migrate

以下のような出力があれば成功です。

== 20190129024253 EnableExtensionForUuid: migrating ===========================
-- extension_enabled?("pgcrypto")
   -> 0.0206s
-- enable_extension("pgcrypto")
   -> 0.0771s
== 20190129024253 EnableExtensionForUuid: migrated (0.0981s) ==================

Userモデルを生成する

rails g model User name:string
20190129043612_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users, id: :uuid do |t|
      t.string :name

      t.timestamps
    end
  end
end

マイグレーション

コンソールからマイグレーションコマンドを実行します。

rails db:migrate

以下のような出力であれば成功です。

== 20190129041857 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0618s
== 20190129041857 CreateUsers: migrated (0.0620s) =============================

確認

Rails consoleで確認します。

Rails c
> User.create
   (0.2ms)  BEGIN
  User Create (7.2ms)  INSERT INTO "users" ("created_at", "updated_at") VALUES ($1, $2) RETURNING "id"  [["created_at", "2019-01-29 04:41:06.181904"], ["updated_at", "2019-01-29 04:41:06.181904"]]
   (2.7ms)  COMMIT
=> #<User id: "f15e0b60-d657-4b20-b5e7-2dacf99609dc", name: nil, created_at: "2019-01-29 04:41:06", updated_at: "2019-01-29 04:41:06">

<User id: "f15e0b60-d657-4b20-b5e7-2dacf99609dc"とあるように、user_idは1ではなく、uuidが付与されています。

他のModelもマイグレーションファイルで同じ記載をすれば実現出来ます。

2
2
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
2
2