ruby on rails - remove - ¿Es posible renombrar un índice usando una migración de rieles?
rollback migration rails (5)
Sé que hay una transformación rename_column
, pero parece que rename_index
no existe.
¿Tengo que usar remove_index
y add_index
en add_index
lugar?
A partir de Rails 5 (EDIT: también en Rails 4), el cambio de nombre de la columna también cambiará el nombre del índice automáticamente.
Rails 3 proporciona un atajo para cambiar el nombre de un índice:
rename_index :table_name, :old_name, :new_name
http://guides.rubyonrails.org/migrations.html
Por cierto, no hace más que eliminar el anterior y agregar el nuevo:
http://apidock.com/rails/v2.3.8/ActiveRecord/ConnectionAdapters/SchemaStatements/rename_index
Según la API , usar remove_index
y add_index
es la única forma de lograr esto.
También puede ejecutar SQL arbitrario en sus migraciones.
Tenemos algunos métodos de ayuda que agregan claves externas a nuestras tablas:
def add_foreign_key(from_table, from_column, to_table)
constraint_name = "fk_#{from_table}_#{from_column}"
execute %{alter table #{from_table}
add constraint #{constraint_name}
foreign key (#{from_column})
references #{to_table}(id)
}
end
Puede usar cualquier SQL que admita su base de datos.
rename_index
debería tener cadenas y no símbolos.
rename_index :table_name, ''old_name'', ''new_name''
Me hizo arañar mi cabeza por un tiempo cuando trato de cambiar el nombre de una tabla y sus índices. Rails 3.2.3 y MySQL.