J'ai ajouté un tableau dont je pensais avoir besoin, mais je ne prévois plus de l'utiliser. Comment dois-je enlever cette table?
J'ai déjà effectué des migrations, donc la table est dans ma base de données. Je pense que Rails generate migration
devrait être capable de gérer ça, mais je n'ai pas encore compris comment.
J'ai essayé:
Rails generate migration drop_tablename
mais cela vient de générer une migration vide.
Quelle est la manière "officielle" de déposer une table dans Rails?
Vous ne pourrez pas toujours simplement générer la migration pour avoir déjà le code que vous voulez. Vous pouvez créer une migration vide puis la renseigner avec le code dont vous avez besoin.
Vous pouvez trouver des informations sur la manière d'effectuer différentes tâches dans une migration ici:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Plus spécifiquement, vous pouvez voir comment supprimer une table en utilisant l'approche suivante:
drop_table :table_name
Commencez par générer une migration vide avec le nom de votre choix. Il est important de le faire de cette façon, car cela crée la date appropriée.
Rails generate migration DropProductsTable
Cela générera un fichier .rb dans/db/migrate/like 20111015185025_drop_products_table.rb
Maintenant, éditez ce fichier pour qu'il ressemble à ceci:
class DropProductsTable < ActiveRecord::Migration
def up
drop_table :products
end
def down
raise ActiveRecord::IrreversibleMigration
end
end
La seule chose que j'ai ajoutée était drop_table :products
et raise ActiveRecord::IrreversibleMigration
.
Ensuite, lancez rake db:migrate
et il supprimera la table pour vous.
Ecrivez votre migration manuellement. Par exemple. lancez Rails g migration DropUsers
.
En ce qui concerne le code de la migration, je vais simplement citer le message de Maxwell Holder Rails Migration Checklist
rake db:migrate
et ensuite de rake db:rollback
échoueraclass DropUsers < ActiveRecord::Migration
def change
drop_table :users
end
end
class DropUsers < ActiveRecord::Migration
def up
drop_table :users
end
def down
fail ActiveRecord::IrreversibleMigration
end
end
class DropUsers < ActiveRecord::Migration
def change
drop_table :users do |t|
t.string :email, null: false
t.timestamps null: false
end
end
end
Bien que les réponses fournies ici fonctionnent correctement, je voulais quelque chose de plus simple, mais je l’ai trouvé ici: link Commencez par entrer dans la console Rails:
$Rails console
Puis tapez simplement:
ActiveRecord::Migration.drop_table(:table_name)
Et fait, a travaillé pour moi!
Vous devez créer un nouveau fichier de migration à l'aide de la commande suivante
Rails generate migration drop_table_xyz
et écrivez du code drop_table dans le fichier de migration nouvellement généré (db/migration/xxxxxxx_drop_table_xyz), comme
drop_table :tablename
Ou, si vous souhaitez supprimer une table sans migration, ouvrez simplement la console Rails en
$ Rails c
et exécuter la commande suivante
ActiveRecord::Base.connection.execute("drop table table_name")
ou vous pouvez utiliser une commande plus simplifiée
ActiveRecord::Migration.drop_table(:table_name)
class DropUsers < ActiveRecord::Migration
def change
drop_table :users do |t|
t.string :name
t.timestamps
end
end
end
Je pense que pour être complètement "officiel", il vous faudrait 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é. On peut supposer que ce code pourrait simplement être extrait de schema.rb au moment de la création de la migration.
Cela semble un peu étrange, de mettre dans le 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 faire cela pour une table que je devais laisser tomber, mais honnêtement, je n'ai pas testé le "duvet" et je ne savais pas pourquoi je le ferais.
vous pouvez simplement déposer une table de la console Rails . d'abord ouvrir la console
$ Rails c
puis collez cette commande dans la console
ActiveRecord::Migration.drop_table(:table_name)
remplacez nom_table par la table que vous souhaitez supprimer.
vous pouvez également déposer la table directement depuis le terminal. il suffit d'entrer dans le répertoire racine de votre application et d'exécuter cette commande
$ Rails runner "Util::Table.clobber 'table_name'"
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érer une migration:
Rails generate migration revert_create_tablename
Ecrire la migration:
require_relative '20121212123456_create_tablename'
class RevertCreateTablename < ActiveRecord::Migration[5.0]
def change
revert CreateTablename
end
end
De cette façon, vous pouvez également revenir en arrière et utiliser pour annuler toute migration.
Ouvrez votre console Rails
ActiveRecord::Base.connection.execute("drop table table_name")
La manière simple et officielle serait la suivante:
Rails g migration drop_tablename
Maintenant, allez dans votre base de données/migrate et recherchez votre fichier qui contient le nom de fichier drop_tablename comme nom de fichier, puis modifiez-le.
def change
drop_table :table_name
end
Ensuite, vous devez courir
rake db:migrate
sur votre console.
Alternative à la levée d'une exception ou à la tentative de recréation d'une table maintenant vide - tout en permettant la restauration, la restauration etc.
def change
drop_table(:users, force: true) if ActiveRecord::Base.connection.tables.include?('users')
end
ActiveRecord::Base.connection.drop_table :table_name
Je ne pouvais pas le faire fonctionner avec le script de migration, alors je suis allé de l'avant avec cette solution. Entrez la console Rails en utilisant le terminal:
Rails c
Type
ActiveRecord::Migration.drop_table(:tablename)
Cela fonctionne bien pour moi. Cela supprimera le précédent de la table. N'oubliez pas de courir
Rails db:migrate
Exécutez cette commande: -
Rails g migration drop_table_name
puis:
rake db:migrate
ou si vous utilisez la base de données MySql, alors:
show databases;
show tables;
drop table_name;
J'avais besoin de supprimer nos scripts de migration avec les tables elles-mêmes ...
class Util::Table < ActiveRecord::Migration
def self.clobber(table_name)
# drop the table
if ActiveRecord::Base.connection.table_exists? table_name
puts "\n== " + table_name.upcase.cyan + " ! "
<< Time.now.strftime("%H:%M:%S").yellow
drop_table table_name
end
# locate any existing migrations for a table and delete them
base_folder = File.join(Rails.root.to_s, 'db', 'migrate')
Dir[File.join(base_folder, '**', '*.rb')].each do |file|
if file =~ /create_#{table_name}.rb/
puts "== deleting migration: " + file.cyan + " ! "
<< Time.now.strftime("%H:%M:%S").yellow
FileUtils.rm_rf(file)
break
end
end
end
def self.clobber_all
# delete every table in the db, along with every corresponding migration
ActiveRecord::Base.connection.tables.each {|t| clobber t}
end
end
depuis la fenêtre du terminal, lancer:
$ Rails runner "Util::Table.clobber 'your_table_name'"
ou
$ Rails runner "Util::Table.clobber_all"
la meilleure façon de faire est
Rails g migration Drop_table_Users
puis faites ce qui suit
rake db:migrate
Courir
rake db:migrate:down VERSION=<version>
Où <version>
est le numéro de version de votre fichier de migration que vous souhaitez restaurer.
Exemple:-
rake db:migrate:down VERSION=3846656238
Si vous souhaitez supprimer la table du schéma, effectuez l'opération ci-dessous -
Rails db:rollback
si quelqu'un cherche comment le faire en SQL.
tapez Rails dbconsole
depuis le terminal
entrer le mot de passe
En console faire
USE db_name;
DROP TABLE table_name;
exit
N'oubliez pas de supprimer le fichier de migration et la structure de table du schéma
si vous voulez supprimer une table spécifique, vous pouvez le faire
$ Rails db:migrate:up VERSION=[Here you can insert timestamp of table]
sinon, si vous voulez supprimer toute votre base de données, vous pouvez le faire
$Rails db:drop