🔖

[Rails] 主キーの名前だけを変更する

2021/09/24に公開

まえおき

テーブルの主キーの名前を id 以外に変更する必要があったので、その時のメモ。ちなみに変えるのは名前だけで、中身の挙動(= 自動で連番されていくやつ)は変えない。

環境

Rails: 6.1.4
MySql: 10.13

結論(マイグレーションファイル)

class CreateHogeTable < ActiveRecord::Migration[6.1]
  def change
    create_table :hoge_tables, id: false do |t|
      t.column :hoge_id, 'BIGINT PRIMARY KEY AUTO_INCREMENT', null: false
    end
  end
end

雑解説

  • id: false で自動生成される主キー(=id) を生成しないようする。
  • t.column にすることで第二引数に生SQLのようなオプションを追加できる。そしてそのオプション内容が BIGINT PRIMARY KEY AUTO_INCREMENT となる。これでデフォルトで自動生成される主キーの機能を損なうことなく名前だけを変更できる。
    • ここでは BIGINT で指定しているが int を使用したい場合は INT とすればいい

Discussion