J'ai ajouté une table dont je pensais que j'allais avoir besoin, mais maintenant je ne prévois plus de l'utiliser. Comment dois-je supprimer ce tableau?
J'ai déjà exécuté des migrations, donc la table est dans ma base de données. Je pense que je rails generate migration
devrais être capable de gérer cela, mais je n'ai pas encore compris comment.
J'ai essayé:
rails generate migration drop_tablename
mais cela a juste généré une migration vide.
Quelle est la manière "officielle" de déposer une table dans Rails?
ruby-on-rails
database
ruby-on-rails-3
migration
rake
Jason Whitehorn
la source
la source
rails generate migration
a des options en ligne de commande pour générer du code de migration pour créer des tables, ajouter ou modifier des colonnes, etc., ce serait bien s'il avait également une option pour supprimer une table - mais ce n'est pas le cas. Bien sûr, l'écriture de laup
partie est simple - appelez simplementdrop_table
- mais ladown
partie, générant à nouveau la table, peut ne pas toujours être aussi simple, surtout si le schéma de la table en question a été modifié par des migrations après sa création initiale. Peut-être que quelqu'un devrait suggérer aux développeurs de Rails que l'ajout d'une telle option serait une bonne idée.rake
commande de migration-création, avec le nom d'une table comme paramètre, qui produirait les fonctionsup
et nécessairesdown
.Réponses:
Vous ne pourrez pas toujours générer simplement la migration pour avoir déjà le code que vous souhaitez. Vous pouvez créer une migration vide, puis la remplir avec le code dont vous avez besoin.
Vous pouvez trouver des informations sur la façon d'accomplir différentes tâches dans une migration ici:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Plus précisément, vous pouvez voir comment supprimer une table en utilisant l'approche suivante:
la source
Générez d'abord une migration vide avec le nom que vous souhaitez. Il est important de procéder de cette façon car cela crée la date appropriée.
Cela générera un fichier .rb dans / db / migrate / like 20111015185025_drop_products_table.rb
Modifiez maintenant ce fichier pour qu'il ressemble à ceci:
La seule chose que j'ai ajoutée était
drop_table :products
etraise ActiveRecord::IrreversibleMigration
.Ensuite, courez
rake db:migrate
et ça laissera tomber la table pour vous.la source
down
méthode, vous ne les récupérerez pas, ce n'est donc pas une restauration correcte. Il vaut mieux indiquer clairement que la migration est irréversible que de donner un faux sentiment qu'elle peut être récupérée.Écrivez votre migration manuellement. Par exemple, courez
rails g migration DropUsers
.En ce qui concerne le code de la migration, je vais juste citer la liste de contrôle de la migration des Rails de Maxwell Holder
MAUVAIS - en cours d'exécution
rake db:migrate
puisrake db:rollback
échoueraBON - révèle l'intention que la migration ne devrait pas être réversible
MIEUX - est en fait réversible
la source
schema.rb
, n'oubliez pas de rechercher égalementschema.rb
des clés étrangères. Ajoutez ensuite la définition de la clé étrangère audrop_table
bloc, par exemple:t.foreign_key "other_table"
Bien que les réponses fournies ici fonctionnent correctement, je voulais quelque chose d'un peu plus «simple», je l'ai trouvé ici: lien Première entrée dans la console des rails:
Tapez ensuite:
Et c'est fait, ça a marché pour moi!
la source
rails destroy model User
Vous devez créer un nouveau fichier de migration à l'aide de la commande suivante
et écrivez le code drop_table dans le fichier de migration nouvellement généré (db / migration / xxxxxxx_drop_table_xyz) comme
Ou si vous vouliez déposer une table sans migration, ouvrez simplement la console des rails en
et exécuter la commande suivante
ou vous pouvez utiliser une commande plus simplifiée
la source
la source
Je pense que pour être complètement "officiel", vous devez créer une nouvelle migration et mettre drop_table dans self.up. La méthode self.down doit alors contenir tout le code pour recréer la table dans son intégralité. Vraisemblablement, ce code pourrait simplement être extrait de schema.rb au moment où vous créez la migration.
Cela semble un peu étrange, de mettre du code pour créer une table dont vous savez que vous n'aurez plus besoin, mais cela garderait tout le code de migration complet et "officiel", non?
Je viens de le faire pour une table que je devais laisser tomber, mais honnêtement, je n'ai pas testé le "down" et je ne sais pas pourquoi je le ferais.
la source
raise ActiveRecord::IrreversibleMigration
dans la méthode self.down, de sorte que vous vous donniez au moins une erreur / notification si vous essayez de revenir en arrière.CreateMyTable.up
etActiveRecord::Migrator.run(:up, ActiveRecord::Migrator.migrations_paths, X)
où X est la migration qui a initialement créé la table, mais aucun ne fonctionne - dans les deux approches, AR vérifie d'abord si la migration a déjà été appliquée, et l'ignore silencieusement si c'est le cas. `vous pouvez simplement déposer une table depuis la console des rails. ouvrez d'abord la console
puis collez cette commande dans la console
remplacez table_name par la table que vous souhaitez supprimer.
vous pouvez également déposer la table directement depuis le terminal. entrez simplement dans le répertoire racine de votre application et exécutez cette commande
la source
La manière simple et officielle serait la suivante:
Maintenant, allez dans votre db / migrate et recherchez votre fichier qui contient le drop_tablename comme nom de fichier et modifiez-le en conséquence.
Ensuite, vous devez exécuter
sur votre console.
la source
Vous pouvez annuler une migration telle qu'elle est dans le guide:
http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations
Générez une migration:
Écrivez la migration:
De cette façon, vous pouvez également annuler et utiliser pour annuler toute migration
la source
Alternative à la levée d'exception ou à la tentative de recréer une table désormais vide - tout en permettant la restauration, la restauration, etc. -
la source
Je n'ai pas été en mesure de le faire fonctionner avec le script de migration, j'ai donc continué avec cette solution. Entrez dans la console des rails à l'aide du terminal:
Type
Cela fonctionne bien pour moi. Cela supprimera le tableau précédent. N'oubliez pas de courir
la source
Ouvrez votre console de rails
la source
ActiveRecord::Base.connection.drop_table :table_name
la source
Je devais supprimer nos scripts de migration ainsi que les tables elles-mêmes ...
à partir de la fenêtre du terminal:
ou
la source
la meilleure façon de faire est
puis procédez comme suit
la source
Courir
Où
<version>
est le numéro de version de votre fichier de migration que vous souhaitez rétablir.Exemple:-
la source
si quelqu'un cherche comment le faire en SQL.
type à
rails dbconsole
partir du terminalEntrer le mot de passe
Dans la console, faites
USE db_name;
DROP TABLE table_name;
exit
N'oubliez pas de supprimer le fichier de migration et la structure de la table du schéma
la source
rails db
si vous voulez supprimer une table spécifique, vous pouvez le faire
sinon, si vous voulez supprimer toute votre base de données, vous pouvez le faire
la source
Drop Table / Migration
exécuter: - $ rails générer la migration DropTablename
exp: - $ rails génèrent la migration DropProducts
la source
Exécutez cette commande: -
puis:
ou si vous utilisez la base de données MySql, alors:
show databases;
show tables;
drop table_name;
la source
Si vous souhaitez supprimer la table du schéma, effectuez l'opération ci-dessous -
la source