¿Cómo manejo nombres de índice demasiado largos en una migración de Ruby on Rails ActiveRecord?
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?
Proporcionar la :name
opció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 :index
opción references
en un create_table
bloque, toma el mismo hash de opciones como add_index
valor:
t.references :long_name, index: { name: :my_index }
Puede cambiar el nombre del índice en las definiciones de columnas dentro de un create_table
bloque (como el que obtiene del generador de migración).
create_table :studies do |t|
t.references :user, index: {:name => "index_my_shorter_name"}
end