Укажите пользовательское имя индекса при использовании add_reference

У меня есть следующая миграция

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_reference так же, как мы указываем в add_index :table, :column, :name => 'index name'

Ответ 1

Как я прокомментировал, выполните:

add_index :table, :column, name: 'index name' 

Вот документация. Или вы можете попробовать следующее:

class LinkDoctorsAndSpecializations < ActiveRecord::Migration
  def change
    add_reference :doctors, :doctor_specialization, polymorphic: true, index: { name: 'index name' }
  end
end

Ответ 2

Это действительно работает:

add_index :table, :column, name: 'index name'

Посмотрите для получения дополнительных примеров.

Ответ 3

Я бы не предложил оставить "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' }

Ответ 4

Я слышал, что лучший способ исправить это - просто оставить его вне ссылочной строки добавления и указать его вручную ниже, как в последней строке вашего вопроса.

add_index :table, :column, :name => 'index name'