PAGE TOP

アトトックラボ

20171122

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

お問い合わせはお問い合わせフォームかお電話でご連絡ください。
Btn mail
Btn tel

アトトックラボとは?

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


最近の記事


タグ