Entfernen eines Modells in Schienen (Rückseite von „Schienen g Modelltitel…“)


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

Wie kann ich dieses Modell vollständig entfernen? Vielen Dank


5
Die folgende Antwort von Mikhail bezieht sich auf ein Modell, das bei der letzten Migration erstellt wurde. Wenn Sie ein Modell und seine Tabelle entfernen möchten, die es schon länger gibt, beschreibt dieser Thread genau, was zu tun ist.
Ninjakannon

Antworten:


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

Wenn Sie ein Modell generieren, wird eine Datenbankmigration erstellt. Wenn Sie auf diesem Modell 'destroy' ausführen, wird die Migrationsdatei gelöscht, nicht jedoch die Datenbanktabelle. Also vor dem Laufen

bundle exec rake db:rollback

:( Lesen Sie die erste Zeile und haben Sie es getan. Es war meine Schuld, aber eine richtig geordnete Antwort kann geholfen haben.
Mike T

4
Wenn es sich um eine Entwicklung handelt und Sie keine Angst haben, Ihre Daten zu verlieren, können Sie sie ausführen bundle exec rake db:drop db:create db:migrate. Es wird eine neue leere Datenbank sein.
Mikhail Nikalyukin

Ye danke. Ich habe die Migration aus dem Papierkorb wiederhergestellt, aber es stellte sich heraus, dass ich auch eine andere fehlende Migration hatte, also werde ich tun, was Sie vorschlagen
Mike T

6
@ MikeT Du was? Die Migration aus dem Papierkorb wiederhergestellt? Sie verwenden kein VCS? o_O Das solltest du unbedingt!
Plunntic iam

Arbeitete für mich, aber ich musste auch in route.rb gehen und "devise_for: MODEL"
cormacncheese

54

Versuche dies

rails destroy model Rating

Modell, Migration, Tests und Fixtures werden entfernt


5
Es entfernt alle, aber es wird keine Downgrade-Migration oder ähnliches erstellt.
Herr. Der

28

Für zukünftige Fragesteller: Wenn Sie die Tabellen nicht von der Konsole löschen können, versuchen Sie, eine Migration zu erstellen, die die Tabellen für Sie löscht. Sie sollten eine Migration erstellen und dann in den gewünschten Dateinotizentabellen wie folgt löschen:

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

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

Tolle Antwort, wird sich bei einem Capistrano-Einsatz wie erwartet verhalten.
LessQuesar

18
  1. So entfernen Sie die Migration (wenn Sie die Migration bereits migriert haben)

    rake db:migrate:down VERSION="20130417185845" #Your migration version
  2. Modell entfernen

    rails d model name  #name => Your model name

rails d modelist das, wonach ich suche, um meine umzukehren rails g model.
Komsun K.

3

Hier ist eine andere Implementierung von Jenny Langs Antwort, die für Rails 5 funktioniert.

Erstellen Sie zuerst die Migrationsdatei:

bundle exec be rails g migration DropEpisodes

Füllen Sie dann die Migrationsdatei wie folgt aus:

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

Beim Laufen rails db:migratewird die Tabelle gelöscht. Wenn Sie ausführen rails db:rollback, gibt Rails einen ActiveRecord::IrreversibleMigrationFehler aus.


Dies ist eine nützliche Antwort - aber der Befehl funktioniert bei mir nicht. Ich habe verwendet: Bundle Exec Rails generieren Migration DropEpisodes Und dann würde ich auch den folgenden Modell-Löschcode verwenden.
Andrew Spode
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.