次の移行があります
class LinkDoctorsAndSpecializations < ActiveRecord::Migration
def up
add_reference :doctors, :doctor_specialization, polymorphic: true, index: true
end
def down
remove_reference :doctors, :doctor_specialization, polymorphic: true
end
end
rake db:migrate
を実行すると、エラーが発生します
Index name 'index_doctors_on_doctor_specialization_type_and_doctor_specialization_id' on table 'doctors' is too long; the limit is 63 characters
したがって、add_index :table, :column, :name => 'index name'
で指定する方法のように、add_referenceを使用するときに、インデックス名を指定するにはどうすればよいですか。
「add_reference」を省略することはお勧めしませんが、「index」オプションのハッシュキーを省略してから「add_index」を使用することはできます。
add_reference :table, :column
add_index :table, :column, :name => 'index_table_column'
または、より適切な方法は次のようになります。
add_reference :doctors, :doctor_specialization, polymorphic: true, index: { name: 'index_doctors_doctor_specialization' }
これを修正する最善の方法は、追加の参照行から除外し、質問の最後の行のように、以下で手動で指定することだと聞きました。
add_index :table, :column, :name => 'index name'