Ruby on Rails ActiveRecord の移行で長すぎるインデックス名を処理するにはどうすればよいですか? 質問する

Ruby on Rails ActiveRecord の移行で長すぎるインデックス名を処理するにはどうすればよいですか? 質問する

4 つの関連テーブルの外部キーから作成される一意のインデックスを追加しようとしています。

add_index :studies,
  ["user_id", "university_id", "subject_name_id", "subject_type_id"],
  :unique => true

データベースのインデックス名の制限により、移行が失敗します。エラー メッセージは次のとおりです。

テーブル 'studies' のインデックス名 'index_studies_on_user_id_and_university_id_and_subject_name_id_and_subject_type_id' が長すぎます。制限は 64 文字です。

これをどう処理すればよいでしょうか? 別のインデックス名を指定できますか?

ベストアンサー1

:nameオプションを提供するadd_index例:

add_index :studies,
  ["user_id", "university_id", "subject_name_id", "subject_type_id"], 
  unique: true,
  name: 'my_index'

:indexオプションを使用する場合referencesブロックでは、その値としてcreate_table同じオプションハッシュを取ります。add_index

t.references :long_name, index: { name: :my_index }

おすすめ記事