Укажите пользовательское имя индекса при использовании 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'