Esto es lo que haría:
Cree una migración para cambiar el nombre de la tabla (nivel de base de datos). Supongo que su vieja mesa se llama corps . El contenido de la migración será:
class RenameCorpsToStores < ActiveRecord::Migration
def change
rename_table :corps, :stores
end
end
Cambie el nombre de archivo de su modelo, la definición de su clase de modelo y las asociaciones del modelo:
- Cambio de nombre de archivo:
corp.rb
->store.rb
- Código de
store.rb
: Cambio class Corp
paraclass Store
- Cambiar el nombre de todas las asociaciones de modelos como
has_many :corps
->has_many :stores
Cambie el nombre de archivo de su controlador y la definición de su clase de controlador:
- Cambio de nombre de archivo:
corps_controller.rb
->stores_controller.rb
- Código de
stores_controller.rb
: Cambio class CorpsController
paraclass StoresController
Cambiar el nombre de las carpetas de vistas. Desde corps
hasta stores
.
Realice los cambios necesarios en las rutas en el config/routes.rb
archivo, como resources :corps
-> resources :stores
, y asegúrese de que todas las referencias en el código cambien de corps a stores (corps_path, ...)
Recuerde ejecutar la migración :)
Si lo anterior no es posible, intente eliminar db / schema.rb y ejecute:
$ rake db:drop db:create db:migrate
find -name "oldname_on_singular?*
para obtener una lista de archivos para cambiar el nombre. Luego lo copio en calc, lo pego dos veces en la segunda y tercera columna. En la primera columna agrego el comando de cambio de nombre y en la última columna cambio por el nuevo nombre, algo así como:git mv ./spec/views/oldname ./spec/views/new name
rake db:drop
es super peligroso! ¡Le recomendaría que elimine esta línea para cambiarla a "rake db: migrate"! ¡La gente tiende a copiar, pegar y ejecutar!Además de la respuesta de Nobita, también debe cambiar las definiciones de la clase de prueba y ayudante y los nombres de archivo para
corps
astore
. Más importante aún , debe cambiarcorps
astore
en su archivo config / routes.rbEntonces, en total, está realizando cambios en el controlador, el modelo asociado, las vistas, los ayudantes, las pruebas y los archivos de rutas.
Creo que lo que has visto sugerido con
destroy
&generate
es una mejor opción. He dado una respuesta sobre cómo hacer esto aquí: Rails: renombrar un controlador y el modelo correspondientefuente
Puedes probar Rails Refactor gema , una herramienta de línea de comandos para refactores simples como cambiar el nombre del modelo y el controlador para proyectos de Rails
Uso:
fuente
Además de la respuesta de Nobita (que comentaría si tuviera suficiente representante), si se siente valiente, los cambios en los nombres de archivo y las referencias al modelo en su código pueden automatizarse un poco. Por ejemplo, para cambiar las referencias en su código, puede usar
Singular, menos y mayus:
Plural, minus y mayus (el singular reemplaza el plural si el plural solo necesita y el carácter s al final):
Cambiar el nombre de los archivos:
Y hay una utilidad llamada renombrar en algunos sabores * nix (incluido Slackware) que lo ayudará a renombrar los archivos:
Sin embargo, verifique que el cambio de nombre es lo que cree que es, he conocido otras distribuciones como Ubuntu que se envían con una utilidad diferente del mismo nombre (consulte /unix/78621/find-rename-command- no funciona ). En Ubuntu, harías esto en su lugar:
Tenga en cuenta que desea evitar cambiar el nombre de los archivos en db / excepto posiblemente en su archivo seeds.rb, por lo que probablemente desee excluir este directorio y realizar los cambios manualmente.
fuente
Otra cosa importante es que necesita actualizar las asociaciones del modelo, lo que tendrá que hacer ya sea que cambie el nombre manualmente o destruya y genere el recurso (ya que existen en los otros modelos). Puede ejecutar una migración para cambiar los nombres de columna de las claves externas en la base de datos y cambiar todas las referencias a esas claves externas en el código:
o establezca una clave externa personalizada al declarar la asociación que usa la clave externa anterior:
Además, si su recurso incluye imágenes, a menudo se almacenan en un directorio que incluye el nombre del recurso, pero (con carrierwave al menos) una vez que se cambia el nombre del recurso, se hará referencia a ellas incorrectamente (el archivo existe en '/ uploads / old / image / 1 / pic.jpg 'pero se busca en' uploads / new / ... '), por lo que tendrá que eliminar y volver a cargar las imágenes, moverlas a la nueva ruta o quizás cambiar dónde están' están siendo buscados.
fuente
Y si tiene pruebas de modelo, necesita cambiar:
Cambio de nombre de archivo: corp_test.rb -> store_test.rb (también para pruebas de controlador, pruebas de integración, accesorios, etc.)
Código de store_test.rb: cambie la clase CorpTest por la clase StoreTest.
Y todas las referencias de corp en el controlador, modelo, integración, pruebas de fijación.
fuente
Como alguien que acaba de terminar este doloroso proceso, el paso MÁS importante es construir suficientes PRUEBAS para verificar la mayor funcionalidad posible. Deben cubrir no solo el modelo / controlador al que planea cambiar el nombre, sino también todos los demás modelos / controladores / partes de vistas. De todos modos es una buena (o tal vez incluso una práctica obligada).
Realice estos pasos por iteraciones, a veces debe volver a los pasos varias veces (5 y más) para descubrir archivos adicionales que deben cambiarse. Y ahora para los pasos de cambio de nombre:
Corps/Corp
aStores/Store
en ladb/migrate
carpetaIntenta ejecutar:
rake db: drop: all
rake db: crear
rake db: migrar
Cambiar el contenido del
db/seeds.rb
archivo.rake db:seed --trace
(En este paso, es posible que deba cambiar otros archivos de modelo / controlador).test/fixtures
archivos. es posible que deba cambiar no solo corps.yml sino otros archivos relacionados (algunos archivos pueden incluir corp_id).TESTOPTS="--seed=1981"
o cualquier otro número)fuente
para el controlador, tendrá que realizar cambios en los siguientes lugares si lo hace manualmente :
por modelo, la respuesta de Nobita es bastante buena
fuente