Mi sembra strano per me, che la creazione di modelli, in esecuzione della migrazione, distruggendolo, e la creazione di nuovo stesso modello di rapporti di eccezione SQL:Rimuovere rotaie modello dopo la migrazione
project|master ⇒ rails g model name name
invoke active_record
create db/migrate/20130417185814_create_names.rb
create app/models/name.rb
project|master⚡ ⇒ rake db:migrate
== CreateNames: migrating ====================================================
-- create_table(:names)
-> 0.0020s
== CreateNames: migrated (0.0021s) ===========================================
project|master⚡ ⇒ rails d model name
invoke active_record
remove db/migrate/20130417185814_create_names.rb
remove app/models/name.rb
project|master⚡ ⇒ rake db:migrate
project|master⚡ ⇒ rails g model name test
invoke active_record
create db/migrate/20130417185845_create_names.rb
create app/models/name.rb
project|master⚡ ⇒ rake db:migrate
== CreateNames: migrating ====================================================
-- create_table(:names)
rake aborted!
An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: table "names" already exists: CREATE TABLE "names" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "test" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) /path/project/db/migrate/20130417185845_create_names.rb:3:in `change'
-- create_table("names", {:force=>true})
-> 0.0100s
-- initialize_schema_migrations_table()
-> 0.0025s
-- assume_migrated_upto_version(20130417185814, ["/path/project/db/migrate"])
-> 0.0010s
You have 1 pending migrations:
20130417185845 CreateNames
Run `rake db:migrate` to update your database then try again.
Forse, facendo qualcosa di sbagliato? La migrazione ha il codice per l'eliminazione della tabella: può essere utilizzata solo per il rollback?
Soluzione
Elimina modello e il database tavolo e generare uno nuovo è abbastanza facile:
- Crea modello:
rails g model user name
- fare migrazioni:
rake db:migrate
- implementare qualcosa, improvvisamente ricordare che si è necessario eliminare il modello
- Migrazione specifica di Revert:
rake db:migrate:down VERSION=20130417185814
, dove20130417185814
è la migrazione id (può essere visto in rake db: migrate: Stato) - Rimuovere il modello:
rails d model user
- ricordate improvvisamente che avete bisogno di questo modello, ma con gli altri campi
- Crea modello:
rails g model user email group:references
- eseguire correttamente la migrazione database:
rake db:migrate
Ma cosa succede se creo il modello non nell'ultima migrazione? Devo eseguire il rollback di tutte le migrazioni dopo di esso? Sembra strano – Drakmail
'rake db: migrate: down VERSION = 20130417185845' è ciò di cui ho bisogno. Grazie :) – Drakmail