¿Cómo manejo nombres de índice demasiado largos en una migración de Ruby on Rails ActiveRecord?

Resuelto JJD asked hace 13 años • 9 respuestas

Estoy intentando agregar un índice único que se crea a partir de las claves externas de cuatro tablas asociadas:

add_index :studies,
  ["user_id", "university_id", "subject_name_id", "subject_type_id"],
  :unique => true

La limitación de la base de datos para el nombre del índice hace que la migración falle. Aquí está el mensaje de error:

El nombre del índice 'index_studies_on_user_id_and_university_id_and_subject_name_id_and_subject_type_id' en la tabla 'estudios' es demasiado largo; el límite es 64 caracteres

¿Cómo puedo manejar esto? ¿Puedo especificar un nombre de índice diferente?

JJD avatar Mar 26 '11 23:03 JJD
Aceptado

Proporcionar la :nameopción de add_index, por ejemplo:

add_index :studies,
  ["user_id", "university_id", "subject_name_id", "subject_type_id"], 
  unique: true,
  name: 'my_index'

Si usa la :indexopción referencesen un create_tablebloque, toma el mismo hash de opciones como add_indexvalor:

t.references :long_name, index: { name: :my_index }
fl00r avatar Mar 26 '2011 16:03 fl00r

Puede cambiar el nombre del índice en las definiciones de columnas dentro de un create_tablebloque (como el que obtiene del generador de migración).

create_table :studies do |t|
  t.references :user, index: {:name => "index_my_shorter_name"}
end
Craig Walker avatar Aug 25 '2015 17:08 Craig Walker