Close icon
2017月11日22日

Railsのマイグレーションでidを追加しない

Railsでテーブルを作るときにidカラムは追加せずに、他のカラムをプライマリキーにしたい場合があります。
このような場合は、作成したマイグレーションファイルを修正して対応します。

モデルを作成

$ rails g model hoge code:integer name:string

作成したマイグレーションファイル

class CreateHoges < ActiveRecord::Migration[5.0]
  def change
  create_table :hoges do |t|
    t.integer :code
    t.string :name

    t.timestamps
  end
  end
end

作成したマイグレーションファイルを修正し実行

下記の仕様でマイグレーションファイルを修正します。
- idは不要なのでテーブルにidを追加しないようにする
- codeをプライマリキーにする

class CreateHoges < ActiveRecord::Migration[5.0]
  def change
  create_table :hoges, id: false do |t|
    t.column :code, 'INTEGER PRIMARY KEY NOT NULL'
    t.string :name

    t.timestamps
  end
  end
end

create_tableするときにid: falseを指定するとテーブルにidが追加されなくなります。
プライマリキーに指定したいcodeには'INTEGER PRIMARY KEY NOT NULL'を指定します。

作成したテーブルを確認

修正したマイグレーションファイルを実行し、sqliteで作成されたテーブルを確認すると、
codeがPRIMARYになっていてidは追加されていません。

sqlite> .schema hoges
CREATE TABLE "hoges" ("code" INTEGER PRIMARY KEY NOT NULL, "name" varchar, "created_at" datetime NOT NULL, "upda
ted_at" datetime NOT NULL);



アトトックラボとは

株式会社アトトックメンバー が技術の話、デザインの話、キャラクターの話、ときどき脱線してガジェットの話やライフハックの話など好きなことを書いています。


連載記事


最近の記事


タグ