Suppression d'un modèle dans les rails (inverse du «titre du modèle rails g…»)

115
rails g model Rating user_id:integer message:string value:integer

Comment puis-je supprimer complètement ce modèle? Merci

Colbern
la source
5
La principale réponse de Mikhail ci-dessous s'applique à un modèle créé lors de la dernière migration. Ceux qui veulent supprimer un modèle et sa table qui existent depuis un certain temps, ce fil décrit exactement ce qu'il faut faire.
Ninjakannon

Réponses:

192
bundle exec rake db:rollback    
rails destroy model <model_name>

Lorsque vous générez un modèle, il crée une migration de base de données. Si vous exécutez 'destroy' sur ce modèle, cela supprimera le fichier de migration, mais pas la table de base de données. Alors avant de courir

bundle exec rake db:rollback
Mikhail Nikalyukin
la source
:( J'ai lu la première ligne et je l'ai fait. C'était de ma faute, mais une réponse correctement ordonnée a peut-être aidé.
Mike T
4
si c'est du développement et que vous n'avez pas peur de perdre vos données, vous pouvez exécuter bundle exec rake db:drop db:create db:migrate. Ce sera une nouvelle base de données vide.
Mikhail Nikalyukin
Merci. J'ai restauré la migration à partir de la corbeille mais il s'avère que j'avais une autre migration manquante aussi, alors je vais faire ce que vous suggérez
Mike T
6
@MikeT Vous quoi? Vous avez restauré la migration depuis la corbeille? Vous n'utilisez aucun VCS? o_O Vous devriez absolument!
plunntic iam
A travaillé pour moi, mais j'ai également dû aller dans routes.rb et supprimer "devise_for: MODEL"
cormacncheese
54

Essaye ça

rails destroy model Rating

Il supprimera le modèle, la migration, les tests et les montages

fl00r
la source
5
Cela supprime tout, mais cela ne crée pas de migration de rétrogradation ou autre.
M. le
28

Pour les futurs interrogateurs: si vous ne pouvez pas supprimer les tables de la console, essayez de créer une migration qui supprime les tables pour vous. Vous devez créer une migration, puis dans les tables de notes de fichier que vous souhaitez supprimer comme ceci:

class DropTables < ActiveRecord::Migration
  def up
    drop_table :table_you_dont_want
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end
Jenny Lang
la source
Excellente réponse, se comportera comme prévu avec un déploiement capistrano.
LessQuesar
18
  1. Pour supprimer la migration (si vous avez déjà migré la migration)

    rake db:migrate:down VERSION="20130417185845" #Your migration version
  2. Pour supprimer un modèle

    rails d model name  #name => Your model name
Govind Shaw
la source
rails d modelest ce que je cherche pour inverser mon rails g model.
Komsun K.
3

Voici une implémentation différente de la réponse de Jenny Lang qui fonctionne pour Rails 5.

Créez d'abord le fichier de migration:

bundle exec be rails g migration DropEpisodes

Remplissez ensuite le fichier de migration comme suit:

class DropEpisodes < ActiveRecord::Migration[5.1]
  def change
    drop_table :episodes
  end
end

Courir rails db:migratefera tomber la table. Si vous exécutez rails db:rollback, Rails lancera une ActiveRecord::IrreversibleMigrationerreur.

Pouvoirs
la source
C'est une réponse utile - mais la commande ne fonctionne pas pour moi. J'ai utilisé: les rails d'exécution de bundle génèrent des DropEpisodes de migration Et puis j'utiliserais également le code de suppression de modèle ci-dessous.
Andrew Spode le