Soy terrible para nombrar y me doy cuenta de que hay un mejor conjunto de nombres para mis modelos en mi aplicación Rails.
¿Hay alguna forma de usar una migración para cambiar el nombre de un modelo y su tabla correspondiente?
ruby-on-rails
migration
rails-activerecord
Solo lectura
fuente
fuente
rake db:migrate
, fallará. Podrías regresar y cambiar esos nombres en la migración, pero eso se volverá complicado. Puede que sea mejor crear un modelo completamente nuevo en lugar de cambiarle el nombre.rake db:schema:load
?rake db:migrate
para configurar una base de datos desde cero se desaconseja activamente, exactamente debido a las preocupaciones señaladas por Andrew.Respuestas:
Aquí hay un ejemplo:
Tuve que ir y cambiar el nombre del archivo de declaración del modelo manualmente.
Editar:
En Rails 3.1 y 4,
ActiveRecord::Migration::CommandRecorder
sabe cómo revertir las migraciones rename_table, por lo que puede hacer esto:(Todavía tiene que revisar y renombrar manualmente sus archivos).
fuente
git grep -i activit
es muy revelador.En Rails 4 todo lo que tenía que hacer era el cambio de definición
Y todos mis índices fueron atendidos por mí. No necesitaba actualizar manualmente los índices eliminando los antiguos y agregando nuevos.
Y funciona utilizando el cambio para subir o bajar en lo que respecta a los índices también.
fuente
Las otras respuestas y comentarios cubrieron el cambio de nombre de la tabla, el cambio de nombre de archivo y el grepping a través de su código.
Me gustaría agregar algunas advertencias más:
Usemos un ejemplo del mundo real que enfrenté hoy: cambiar el nombre de un modelo de 'Comerciante' a 'Negocio'.
fuente
También debe reemplazar sus índices:
Y cambie el nombre de sus archivos, etc., manualmente, como lo describen otras respuestas aquí.
Ver: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Asegúrese de que puede retroceder y avanzar después de escribir esta migración. Puede ser complicado si te equivocas y te atascas con una migración que intenta efectuar algo que ya no existe. Es mejor que descarte toda la base de datos y comience nuevamente si no puede retroceder. Tenga en cuenta que es posible que deba respaldar algo.
Además: revise schema_db para ver cualquier nombre de columna relevante en otras tablas definidas por un has_ o belong_to o algo así. Probablemente también necesites editarlos.
Y finalmente, hacer esto sin un conjunto de pruebas de regresión sería una locura.
fuente
Puede ejecutar este comando: rails g migración rename_ {old_table_name} a {new_table_name}
después de editar el archivo y agregar este código en el cambio de método
rename_table: {old_table_name},: {new_table_name}
fuente