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

4 ответов


Как Я прокомментировал, do:

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

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

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

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


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