コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

RailsのMigrationで reffrenceの too_longを解消する書き方

refferenceの場合、indexが生成されるが自動生成のindex名が長くなってしまう場合の解消例

環境

bin/rails -v
Rails 5.0.2

事象

referenceで指定した場合、Railsのindex名のルールが index_{{ベーステーブル名}}_on_{{リファレンス先のテーブル名}}_id のため、双方長いテーブル名の場合にはindexが作れずエラーとなる。

そのため自動生成の名前ではなく自前で名前をつけてあげる必要がある

やり方

index: {name: index名} で指定できるのでそれを利用する

親テーブルを tottemo_mechakucha_sugoi とし、今回作るテーブルを tottemo_mechakucah_sugoi_kodomo とし、index名を tekitouna_index とした場合は以下

t.references  :tottemo_mechakucha_sugoi
              index: { name: 'tekitouna_index' },
              foreign_key: true,
              comment: "紐づく親のテーブルID"

このようにindexを使うと add_index を指定場合と同じオプションを実行することができる

参考リンク