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
を指定場合と同じオプションを実行することができる