動作環境
- Ruby 2.7.0
- Rails 6.0.3.2
- PostgreSQL 12.3
準備
1. PostgreSQLデータベースを使用してRailsアプリケーションを作成します。
$ rails new blog -d=postgresql
2. config/database.yml
でデータベース名を変更できます。
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: blog_development
test:
<<: *default
database: blog_test
3. 下記のrailsコマンドで config/database.yml
の内容でデータベースを作成してくれます。
$ rails db:create
Created database 'blog_development'
Created database 'blog_test'
PostgreSQLでUUIDを有効にする
通常、以下の手順で、プライマリキーとしてUUIDを使うことが出来ます。
1. マイグレーションファイル作成コマンドを実行します。
$ rails g migration enable_uuid
2. マイグレーションファイルの編集
# db/migrate/xxx_enable_uuid.rb
class EnableUuid < ActiveRecord::Migration[6.0]
def change
enable_extension 'pgcrypto'
end
end
既定のIDをUUIDに設定する
config/initializers/generators.rb
ファイルを作成して、中身を下記のようにします。
# config/initializers/generators.rb
Rails.application.config.generators do |g|
g.orm :active_record, primary_key_type: :uuid
end
この設定でmodel作成時にidがuuidであるというオプションがmigrationファイルに自動で付与されるようになります。
確認
1. Postモデルを作成します。
$ rails g model Post title:string
2. マイグレーションファイルを確認します。
# db/migrate/xxx_create_posts.rb
class CreatePosts < ActiveRecord::Migration[6.0]
def change
create_table :posts, id: :uuid do |t|
t.string :title
t.timestamps
end
end
end
3. マイグレーション
$ rails db:migrate
4. レコードの作成
$ rails console
> Post.create(title: 'new post')
(0.2ms) BEGIN
Post Create (25.3ms) INSERT INTO "posts" ("title", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["title", "new post"], ["created_at", "2020-07-10 13:05:38.915722"], ["updated_at", "2020-07-10 13:05:38.915722"]]
(7.0ms) COMMIT
=> #<Post id: "464b7fa5-aaae-4970-a56f-b5c0cf6c1b83", title: "new post", created_at: "2020-07-10 13:05:38", updated_at: "2020-07-10 13:05:38">
プライマリキーがUUIDタイプになりました!