高木のブログ

【Rails】主キーのidをオートインクリメントさせないマイグレーションファイル

2020/11/02

外部サービスのデータを入れたいときなど、idは自動採番された値ではなく任意に値を入れたい時がある。
Railsで何も考えずにテーブルを作ると、主キーのidはオートインクリメントになるがそれをさせない方法。

articlesテーブルを作る例

$ bin/rails g model article
Running via Spring preloader in process 19
      invoke  active_record
      create    db/migrate/20201101125336_create_articles.rb
      create    app/models/article.rb
class CreateArticles < ActiveRecord::Migration[6.0]
  def change
    create_table :articles, id: false do |t|
      t.column :id, 'BIGINT PRIMARY KEY'
      t.string :title, null: false
      t.string :link, null: false

      t.timestamps
    end
  end
end
$ bin/rails db:migrate
== 20201101125336 CreateArticles: migrating ===================================
-- create_table(:articles, {:id=>false})
   -> 0.0308s
== 20201101125336 CreateArticles: migrated (0.0309s) ==========================
MySQL> desc articles;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id         | bigint       | NO   | PRI | NULL    |       |
| title      | varchar(255) | NO   |     | NULL    |       |
| link       | varchar(255) | NO   |     | NULL    |       |
| created_at | datetime(6)  | NO   |     | NULL    |       |
| updated_at | datetime(6)  | NO   |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
5 rows in set (0.002 sec)

Pixela