1. ホーム
  2. ruby-on-rails

[解決済み] Ruby on RailsのActiveRecordのマイグレーションで、長すぎるインデックス名を処理するには?

2022-03-23 12:34:23

質問

私は、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文字までに制限されています。

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

どのように解決するのですか?

を用意します。 :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 }