MENU
カテゴリー

index name … too long というmigrate時のエラーの対処法【Ruby on Rails】

  • URLをコピーしました!
目次

index name … too long というエラーが出た

Railsでマイグレーションをしたいときに、rails db:migrateとコマンドを打ちますが、そのときにindex name … too longというエラーが出たのでこの対処法をこの記事に記載しておく。

エラーの内容として、index名が長すぎるよという内容になるらしい。

もっと具体的なエラーの内容はこちら

Index name 'index_**************************_on_********id' on table '**************************' is too long; the limit is 64 characters
/api/db/migrate/20220427091308_************************************.rb:3:in `change'

Caused by:
ArgumentError: Index name 'index_**************************_on_*********id' on table '**************************' is too long; the limit is 64 characters
/api/db/migrate/20220427091308_create_**************************:3:in `change'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

こんな感じのエラーが出た。is too longとあるので、長いだろと怒られているらしい。

対処法

対処法はいくつかあるみたいだが、今回の僕が作成したmigrationmファイルでは、t.referencesで、indexが自動的に貼られるようにしている。そこで、そのt.referencesの行にindex名の名前を変更してくれるよう記述を追加した。

具体的なmigrationファイルの内容

class Create********************* < ActiveRecord::Migration[7.0]
  def change
    create_table :********************, comment: "テーブル名" do |t|
      t.references :*****_group, index: { name: '自分でindex名を入力' }, null: false, forgin_key: true, comment: "*****グループid"
      t.integer :**********, null: false, comment: "**********"
      t.integer :**********, null: false, comment: "**********"
      t.decimal :**********, null: false, comment: "*************"

      t.timestamps
      t.datetime :deleted_at
    end
  end
end

こんな感じになった。

t.references :*****_group, index: { name: '自分でindex名を入力' }, null: false, forgin_key: true, comment: "*****グループid"

ここが重要で、, index: { name: ‘自分でindex名を入力’ }と追記することで、index名を変更することができる。

ほかの対処法

ちなみにadd_indexと書いて対処する方法もあるので、知りたい方は以下のQiita記事を参考にするとよいでしょう。

Qiita
RailsのMigrationで index name ... too long と怒られた - Qiita 経緯とかRailsに以下のようなモデルを追加しようとしたら、 index name ... too long というエラーになったので、対処法を覚え書くことにした。class CreatePay…

以上。

よかったらシェアしてね!
  • URLをコピーしました!
目次