Quelle est la meilleure façon de déposer une table et de retirer un modèle dans Rails 3?

J’ai un modèle et une table dont je n’ai plus besoin dans mon application, je pourrais les laisser là mais je voudrais les enlever pour garder les choses en ordre.

J’essaie de trouver la meilleure façon de les supprimer sans déconner mes fichiers migrations & db / schema.rb et tout effet secondaire que cela pourrait avoir sur mon environnement de production, mon application est sur Heroku. J’utilise PostgreSQL à la fois sur ma machine locale et sur heroku.

Jusqu’à présent, j’ai trouvé deux façons de le faire, mais je ne suis pas sûr de savoir quelle est la meilleure méthode / le meilleur chemin?

Méthode 1

Je pensais simplement aller dans ma firebase database et laisser tomber la table et ensuite détruire le modèle.

rails db DROP TABLE table_name \q rails destroy model model_name 

Si je fais cela, qu’arrivera-t-il aux migrations que j’ai pour ce modèle / cette table? J’ai deux migrations pour ce modèle, un timestamp_create_modelname et un add_atsortingbute_to_table name.

Est-ce que cette méthode mettra également à jour le fichier db / schema.rb ?

Lorsque je pousse l’application vers Heroku, je soupçonne que le modèle sera supprimé, mais la table restra en place, y a-t-il une commande heroku pour supprimer une table.

Méthode deux

Une autre façon dont j’ai lu était de générer une nouvelle migration pour supprimer la table et ensuite détruire le modèle.

 rails generate migration drop_tablename 

& puis mettre à jour le fichier ci-dessous:

db / migrate / timestamp_drop_tablename (mise à jour en réponse à la réponse de Dan Wich ci-dessous)

 class DropTablename < ActiveRecord::Migration def up drop_table :tablename end def down create_table :tablename do |t| t.string :table_column t.references :anothertable t.timestamps end add_index :tablenames, :anothertable_id end end 

& puis dans le terminal:

 rake db:migrate rails destroy model model_name rake db:migrate git add . git commit -m "removed table/model_name" git push heroku master heroku run rake db:migrate heroku restart 

Cela semble être la meilleure méthode, mais qu’advient-il des anciens fichiers de migration? Resteront-ils & mettre à jour db / shema à chaque fois que je lance rake db: migrer uniquement pour être remplacé par db / migrate / timestamp_drop_tablename?

Je suis heureux d’expérimenter la deuxième méthode, mais j’aimerais que quelqu’un avec quelqu’un d’expérience puisse peser et me dire comment faire.

La seconde méthode est idéale pour gérer cela: vos fichiers de migration sont censés représenter la manière dont votre firebase database a changé au fil du temps. Les anciens fichiers de migration restront dans votre projet (au cas où, par hypothèse, vous souhaitiez revenir à une version antérieure), mais que Rails ne les exécutera pas lorsque vous exécuterez rake db:migrate car il sait qu’ils ont déjà été exécutés (en fonction de données dans la table schema_migrations de la firebase database).

Votre schéma.rb sera simplement mis à jour une fois pour indiquer que votre firebase database ne contient plus cette table.

Une modification mineure de votre code: votre fichier de migration doit abandonner la table dans la méthode up et la recréer idéalement dans la méthode down . Le “haut” signifie que votre migration abandonne la table pour avancer dans le temps, et si la migration est annulée, la méthode down sera exécutée.

Je sais que c’est un vieux fil. Le plus souvent, vous souhaitez supprimer non seulement le modèle, mais également les itinéraires, le contrôleur et les vues associés à ce modèle. Pour ce faire, lancez ces

 rails g migration DropYourModel rails destroy scaffold YourModelName 

Modifiez votre fichier de migration en drop_table , puis exécutez

 rake db:migrate 

Si le modèle se trouve être défini dans un espace de noms, par exemple, les admins , remplacez la première commande par

 rails destroy scaffold admins/YourModelName