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