Question Rails DB Migration - Comment supprimer une table?


J'ai ajouté une table dont je pensais avoir besoin, mais je ne prévois plus de l'utiliser. Comment dois-je retirer cette table?

J'ai déjà effectué des migrations, la table est donc dans ma base de données. Je pense rails generate migration devrait ê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?


432
2017-10-26 01:52


origine


Réponses:


Vous ne serez pas toujours capable de générer simplement la migration pour avoir déjà le code que vous voulez. 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:

drop_table :table_name

565
2017-10-26 01:54



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 il 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 ressembler à 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é était drop_table :products et raise ActiveRecord::IrreversibleMigration.

Ensuite, courez rake db:migrate et ça va laisser tomber la table pour vous.


317
2017-10-15 18:57



Ecrivez votre migration manuellement. Par exemple. courir rails g migration DropUsers.

En ce qui concerne le code de la migration, je vais juste citer le post de Maxwell Holder Liste de vérification de la migration des rails

BAD - en cours d'exécution rake db:migrate et alors rake db:rollback va échouer

class DropUsers < ActiveRecord::Migration
  def change
    drop_table :users
  end
end

BON - révèle l'intention que la migration ne devrait pas être réversible

class DropUsers < ActiveRecord::Migration
  def up
    drop_table :users
  end

  def down
    fail ActiveRecord::IrreversibleMigration
  end
end

MIEUX - est réellement réversible

class DropUsers < ActiveRecord::Migration
  def change
    drop_table :users do |t|
      t.string :email, null: false
      t.timestamps null: false
    end
  end
end

258
2017-07-27 15:25



Alors 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:

$rails console

Ensuite, tapez simplement:

ActiveRecord::Migration.drop_table(:table_name)

Et fait, a travaillé pour moi!


165
2017-11-08 22:38



Vous devez créer un nouveau fichier de migration en utilisant la commande suivante

rails generate migration drop_table_xyz

et écrivez le 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 vouliez déposer une table sans migration, ouvrez simplement la console des rails en

$ rails c

et exécutez 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)

34
2018-05-26 07:42



  1. rails g migration drop_users
  2. modifier la migration
    class DropUsers < ActiveRecord::Migration
      def change
        drop_table :users do |t|
          t.string :name
          t.timestamps
        end
      end
    end
  1. rake db: migrer

21
2017-07-31 14:20



Je pense, pour être complètement "officiel", vous devez créer une nouvelle migration, et mettre drop_table dans self.up. La méthode self.down devrait alors contenir tout le code pour recréer la table en entier. Vraisemblablement, ce code pourrait simplement provenir de schema.rb au moment de la création de la migration.

Il 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", n'est-ce pas?

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 savais pas pourquoi.


12
2018-04-03 22:50



vous pouvez simplement déposer une table de la console rails. ouvrez d'abord la console

$ rails c

puis collez cette commande dans la console

ActiveRecord::Migration.drop_table(:table_name)

remplacer nom de la table avec la table que vous voulez supprimer.

Vous pouvez également déposer une table directement depuis le terminal. il suffit d'entrer dans le répertoire racine de votre application et exécutez cette commande

$ rails runner "Util::Table.clobber 'table_name'"

10
2017-10-16 06:59