【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)