98 votes

Comment renommer un contrôleur de rails et un modèle dans un projet

J'ai lancé une application Rails et tout fonctionne bien. Mais maintenant, j'aimerais remanier un contrôleur et le modèle associé:

Je voulais changer le contrôleur Corps en Stores et le même (sans s final) pour le modèle.

En regardant sur Google, les gens ont suggéré de détruire puis de générer le contrôleur et le modèle. Le problème est que cela effacera le code de chaque fichier!

Toute solution? Merci d'avance.

198voto

Nobita Points 9046

Voici ce que je ferais:

Créer une migration de changer le nom de la table (base de données). Je suppose que votre vieille table est appelée corps. La migration du contenu sera:

class RenameCorpsToStores < ActiveRecord::Migration
  def change
    rename_table :corps, :stores
  end
end

Changer de modèle de nom de fichier et de votre modèle de définition de la classe:

  • Changement de nom de fichier: corp.rb -> store.rb
  • Code de l' store.rb: Variation class Corp pour class Store

Modifier votre fichier de contrôleur nom et votre contrôleur de définition de classe:

  • Changement de nom de fichier: corps_controller.rb -> stores_controller.rb
  • Code de l' stores_controller.rb: Variation class CorpsController pour class StoresController

Renommer les points de vue des dossiers. D' corps de stores.

Faire les changements nécessaires dans les chemins d'accès dans l' config/routes.rb le fichier, comme resources :corps -> resources :stores, et assurez-vous que toutes les références dans le code de changement de corps de magasins (corps_path, ...)

N'oubliez pas d'exécuter la migration :)

11voto

Creed Bratton Points 597

En plus de Nobita vous répondre de la même façon besoin de changer le test & helper définitions de classe et les noms de fichier pour corps de store. Plus Important encore , vous devriez changer de corps de store dans votre config/routes.rb fichier

Donc, au total, vous êtes à faire des changements pour le Contrôleur, Modèle associé, points de Vue, les Aides, les Tests et les Itinéraires de fichiers.

Je pense que ce que vous avez vu proposé avec destroy & generate est une meilleure option. J'ai donné une réponse comment faire ici: Rails : le fait de renommer un controlller et le modèle correspondant

6voto

Pwnrar Points 8

Une autre chose importante est que vous devez mettre à jour le modèle des associations, à qui vous aurez à faire si vous renommer manuellement ou de les détruire et de générer de la ressource (car ils existent dans les autres modèles). Vous pouvez soit exécuter une migration de changer les noms de colonne de la clé étrangère dans la base de données et modifier toutes les références à ces clés étrangères dans le code:

rename_column :table, :old_id, :new_id

ou de personnaliser la clé étrangère lors de la déclaration de l'association qui utilise l'ancienne clé étrangère:

belongs_to :new, foreign_key: "old_id"

Aussi, si votre ressource inclut des images, ils sont souvent stockés dans un répertoire qui comprend le nom de la ressource, mais (avec carrierwave au moins) une fois le nom de la ressource est changé, ils vont être référencé de manière incorrecte (fichier existe à '/uploads/old/image/1/pic.jpg " mais on cherche à 'uploads/new/...'), de sorte que vous aurez à supprimer et re-télécharger les images, de les déplacer vers le nouveau chemin, ou peut-être des changements là où ils sont recherchés.

0voto

Et si vous avez des tests sur modèles, vous devez changer:

Renommer le fichier: corp_test.rb -> store_test.rb (également pour les tests de contrôleur, les tests d'intégration, les fixtures, etc.)

Code de store_test.rb: Modifiez la classe CorpTest pour la classe StoreTest.

Et toutes les références de corp dans le contrôleur, le modèle, l'intégration, les tests de fixtures.

-1voto

Justin D. Points 1676

Vous pouvez simplement renommer les fichiers de contrôleur et de modèle de corps_controller.rb à stores_controller.rb et corp.rb à store.rb . Vous devrez peut-être créer une nouvelle migration ou modifier les fichiers de migration pour renommer votre base de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X