Drop_table Problema evitando el rastrillo DB: migrar
-
25-10-2019 - |
Pregunta
Estaba buscando una manera de dejar caer una mesa en los rieles y comenzar de nuevo y encontré esta respuesta: Migración de Rails DB - ¿Cómo dejar caer una mesa?
Sin embargo, cuando corrí drop_table :examples
Tuve el siguiente error:
-bash: drop_table: command not found
Aquí está mi create_examples
Migrate el archivo:
def self.down
drop_table :examples
end
¿Alguien puede ayudarme a guiarme a arreglar esto y darme una idea de lo que estoy haciendo mal? Necesito arreglarlo porque esta migración en particular está evitando que haga un rake db:migrate
, Generando el siguiente error:
== CreateExamples: migrating ====================================================
-- create_table(:examples)
rake aborted!
An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: table "examples" already exists: CREATE TABLE "examples" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "content" varchar(255), "user_id" integer, "created_at" datetime, "updated_at" datetime)
¡Gracias! (Y si necesito proporcionar más código, hágamelo saber).
Solución
Deberías dejar caer tu antigua mesa justo antes de crear la nueva versión:
def self.up
drop_table :examples
create_table :examples do |t|
#...
end
end
Y ya que realmente no puedes revertir eso drop_table
, es posible que desee plantear una excepción en la reversión:
def self.down
raise ActiveRecord::IrreversibleMigration
end
O tal vez solo quieres mantener tu actual self.down
.