Voici ce que je ferais:
Créez une migration pour changer le nom de la table (niveau base de données). Je suppose que votre ancienne table s'appelle corps . Le contenu de la migration sera:
class RenameCorpsToStores < ActiveRecord::Migration
def change
rename_table :corps, :stores
end
end
Modifiez le nom de votre fichier de modèle, la définition de votre classe de modèle et les associations de modèles:
- Renommer le fichier:
corp.rb
->store.rb
- Code de
store.rb
: Changer class Corp
pourclass Store
- Renommez toutes les associations de modèles comme
has_many :corps
->has_many :stores
Modifiez le nom de votre fichier de contrôleur et la définition de votre classe de contrôleur:
- Renommer le fichier:
corps_controller.rb
->stores_controller.rb
- Code de
stores_controller.rb
: Changer class CorpsController
pourclass StoresController
Renommez les dossiers de vues. Du corps
au stores
.
Apportez les changements nécessaires dans les chemins du config/routes.rb
fichier, comme resources :corps
-> resources :stores
, et assurez-vous que toutes les références dans le code changent de corps en stores (corps_path, ...)
N'oubliez pas d'exécuter la migration :)
Si la précédente n'est pas possible, essayez de supprimer le db / schema.rb et exécutez:
$ rake db:drop db:create db:migrate
find -name "oldname_on_singular?*
pour obtenir une liste de fichiers à renommer. Ensuite, je le copie sur calc, je le colle deux fois sur la deuxième et la troisième colonne. Sur la première colonne, j'ajoute la commande renommer et sur la dernière colonne, je change pour le nouveau nom, quelque chose comme:git mv ./spec/views/oldname ./spec/views/new name
rake db:drop
est super dangereux! Je vous recommande de supprimer cette ligne pour la changer en "rake db: migrate"! Les gens ont tendance à copier-coller et à courir!En plus de la réponse de Nobita, vous devez également modifier les définitions de classe de test et d' assistance et les noms de fichiers pour
corps
enstore
. Plus important encore, vous devez changercorps
pourstore
votre config / routes.rb fichierDonc, au total, vous apportez des modifications au contrôleur, au modèle associé, aux vues, aux aides, aux tests et aux fichiers de routes.
Je pense que ce que vous avez vu suggéré avec
destroy
&generate
est une meilleure option. J'ai donné une réponse sur la façon de procéder ici: Rails: renommer un contrôleur et le modèle correspondantla source
Vous pouvez également essayer la gemme Rails Refactor , un outil de ligne de commande pour des refactors simples comme renommer le modèle et le contrôleur pour les projets Rails
Usage:
la source
J'ajoute à la réponse de Nobita (sur laquelle je commenterais si j'avais assez de représentants), si vous vous sentez courageux, les changements de noms de fichiers et les références au modèle dans votre code peuvent être quelque peu automatisés. Par exemple, pour modifier les références dans votre code, vous pouvez utiliser
Singulier, moins et mayus:
Pluriel, moins et mayus (le singulier remplace le pluriel si le pluriel n'a besoin que du caractère s à la fin):
Renommer les fichiers:
Et il existe un utilitaire appelé renommer sur certaines saveurs * nix (y compris Slackware) qui vous aidera à renommer les fichiers:
Vérifiez que le changement de nom est ce que vous pensez cependant, j'ai connu d'autres distributions comme Ubuntu pour être livrées avec un utilitaire différent du même nom (voir /unix/78621/find-rename-command- ne fonctionne pas ). Sur Ubuntu, vous feriez ceci à la place:
Notez que vous voulez éviter de renommer des fichiers dans db / sauf éventuellement dans votre fichier seeds.rb, donc vous voudrez probablement exclure ce répertoire et apporter des modifications manuellement.
la source
Une autre chose importante est que vous devez mettre à jour les associations de modèles, ce que vous devrez faire si vous renommez manuellement ou si vous détruisez et générez la ressource (puisqu'elles existent dans les autres modèles). Vous pouvez exécuter une migration pour modifier les noms de colonne des clés étrangères dans la base de données et modifier toutes les références à ces clés étrangères dans le code:
ou définissez une clé étrangère personnalisée lors de la déclaration de l'association qui utilise l'ancienne clé étrangère:
De plus, si votre ressource comprend des images, elles sont souvent stockées dans un répertoire qui inclut le nom de la ressource mais (avec carrierwave au moins) une fois que le nom de la ressource est changé, elles seront référencées de manière incorrecte (le fichier existe dans '/ uploads / old / image / 1 / pic.jpg 'mais est recherché dans' uploads / new / ... '), vous devrez donc soit supprimer et retélécharger les images, les déplacer vers le nouveau chemin, ou peut-être changer leur emplacement' être recherché.
la source
Et si vous avez des tests de modèle, vous devez changer:
Renommer le fichier: corp_test.rb -> store_test.rb (également pour les tests de contrôleur, les tests d'intégration, le montage, etc.)
Code de store_test.rb: Changer la classe CorpTest pour la classe StoreTest.
Et toutes les références de corp dans les tests contrôleur, modèle, intégration, fixture.
la source
En tant que personne qui vient de terminer ce processus douloureux, l'étape la plus importante est de créer suffisamment de TESTS pour vérifier autant de fonctionnalités que possible. Ils doivent couvrir non seulement le modèle / contrôleur que vous prévoyez de renommer, mais également tous les autres modèles / contrôleurs / vues. Quoi qu'il en soit, c'est une bonne pratique (ou peut-être même un must).
Faites ces étapes par itérations, parfois vous devez revenir aux étapes plusieurs fois (5 et plus) pour découvrir des fichiers supplémentaires qui doivent être modifiés. Et maintenant, pour les étapes de changement de nom:
Corps/Corp
àStores/Store
dans ledb/migrate
dossierEssayez de courir:
rake db: drop: tout
rake db: créer
rake db: migrer
Changer le contenu du
db/seeds.rb
fichier.rake db:seed --trace
(Dans cette étape, vous devrez peut-être modifier d'autres fichiers de modèle / contrôleur.)test/fixtures
fichiers. vous devrez peut-être modifier non seulement corps.yml mais d'autres fichiers associés (certains fichiers peuvent inclure corp_id).TESTOPTS="--seed=1981"
ou tout autre nombre)la source
pour le contrôleur, vous devrez apporter des modifications aux endroits suivants si vous le faites manuellement :
pour le modèle, la réponse de Nobita est plutôt bonne
la source