やり方
調べたところRails4の頃の情報しか見当たらず、漁ると
auto_increment オプションが搭載されたことにたどり着く。
cerate_tableでの:idに続けざまに書くことで対応可能となるらしい。
以下は、PKをcompany_idにした会社マスタのサンプルである。
/db/migrate/example.rb
def change
create_table :m_company, primary_key: "company_id", id: :bigint, comment: "会社ID", auto_increment: true, default: nil, force: true, comment: '会社マスタ' do |t|
## t.bigint :company_id, null: false, comment: '会社ID' ※←ここには書かない
t.string :name, null: false, comment: '会社名'
t.text :detail, comment: '内容'
t.datetime :created_at, null: false, comment: '作成日時'
t.datetime :updated_at, null: false, comment: '更新日時'
end
end
以下となる。
mysql> desc m_company;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| company_id | bigint(20) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| detail | text | YES | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
あとから変えたい場合は、change_columnで入る
こんな感じ。rollbackできるようにupとdownで書く
/db/migrate/example.rb
def up
change_column :m_company, :company_id, :primary_key, auto_increment: true
end
def down
change_column :m_company, :company_id, :bigint
execute "ALTER TABLE m_company DROP PRIMARY KEY;"
end
問題 コメントが入らない
create_tableでPKを作成してしまうと、テーブルのコメントはかけてもPKカラムのコメントが入らない。(comment:オプションが被るから)
ので、
/db/migrate/example2.rb
def up
create_table :m_company, primary_key: "company_id", id: :bigint, auto_increment: true, default: nil, force: true, comment: '会社マスタ' do |t|
t.string :name, null: false, comment: '会社名'
t.text :detail, comment: '内容'
t.datetime :created_at, null: false, comment: '作成日時'
t.datetime :updated_at, null: false, comment: '更新日時'
end
change_column :m_company, :company_id, comment: "会社ID"
end
def down
# change_column :m_company, :company_id, comment: nil ※コメントだけ追加ならばこれ
drop_table :m_company
end
これでコメントも追加できる”が”、schema.rbを確認するとわかるように
change_columnの内容がcreate_tableにマージされてしまっているのがわかる。
ゆえに、db:setupをした場合は、PKのキーにコメントが入らないためdb:migrateをすることをお勧めする。