2009-12-30 15 views
13

Ho un sacco di modelli di rotaie che sto riscrivendo in un unico modello per semplificare il mio codice e ridurre le tabelle non necessarie.rimuovono i vecchi modelli con le migrazioni

Mi chiedo quale sia il modo migliore per eliminare una classe di modello e la sua tabella. Voglio che le migrazioni passate abbiano ancora successo, ma non voglio lasciare i modelli vuoti in giro. Devo cancellare manualmente le vecchie migrazioni che fanno riferimento a questi modelli, quindi eliminare manualmente i file di classe?

Qualcuno ha qualche consiglio per il modo migliore per farlo?

risposta

2

Che ne dici di fare ruby script/destroy model? Questo dovrebbe occuparsi del modello e della migrazione.

+0

E le successive migrazioni che aggiungono dati a questo modello? fa script/destroy cerca le migrazioni o cancella semplicemente quello iniziale che ha creato la tabella? – brad

+1

Le migrazioni successive avranno bisogno del loro 'script/destory migration migration_name'. Un buon modo per pensarci, è l'annullamento del comando genarato. Quindi, no, non cercherà altre migrazioni che alterano lo stesso modello. – bobbywilson0

+1

giusto, quindi la risposta finale a tutto questo è che posso usare script/destroy, ma ho anche bisogno di modificare manualmente tutte le migrazioni che potrebbero contenere riferimenti a questi modelli eliminati. Grazie mille – brad

2

Potete dare un'occhiata a questo a rails guide. Ma suggerisco, se è possibile, di cancellare i modelli e tutti i riferimenti ai modelli. Questo probabilmente farà risparmiare tempo in seguito, poiché non è necessario mantenere il codice morto nella base di codici.

2

A seconda di quanto in sviluppo o produzione si è, si consiglia di migrare i modelli in modo sicuro utilizzando una migrazione per rimuovere/backup dei dati o cosa no. Poi, come bobbywilson0 suggerito, usando

script/destroy model 

o se si RSpec nulla

script/destroy rspec_model 

Questo eliminerà qualsiasi test spec pure.

Oppure puoi sempre trascinarli nella cartella cestino.

15

Se si desidera eliminare completamente di un modello e la sua tabella di fare questo:

rails destroy model Name 
+7

Questo non genererà una migrazione 'remove_table', ma cancelleremo invece quella' create'. Quindi il modello sarà ancora in 'schema.rb' ... –

6

La questione è un po 'stantio ora, ma ho appena fatto:

rails destroy scaffold <ModelName> -p 

Il flag -p mostra l'output "fingere", che è buono per vedere cosa accadrà. Rimuovi il flag '-p' e i risultati corrisponderanno all'output. Questo ha pulito l'intera collezione di file M-V-C + test + file js + la migrazione originale, nessun problema.

Immagino che se sei uno a cui piace modificare manualmente le tue migrazioni e includere più passaggi in ciascuna, perdere la migrazione originale potrebbe infrangere db: setup, quindi fai attenzione al compratore. Mantenere una sola azione == un file di migrazione dovrebbe evitare questo potenziale snafu.

9

Tutto in un'unica soluzione.

Eseguire i seguenti comandi:

rails destroy model ModelName 
rails g migration DropTableModelName 

L'ex genererà un nuovo file di migrazione che dovrebbe apparire in questo modo:

class DropTableModelName < ActiveRecord::Migration 
    def change 
    drop_table :model_name 
    end 
end 

Ora gestita db:migrate e il gioco è fatto.

0

Se si preferisce avere una risposta basata manuale:

Prima eseguire il seguente comando per identificare quali le migrazioni si desidera rimossi:

rake db:migrate:status 

Sentitevi liberi di grep -i su di esso anche se sei sicuro del tuo schema di denominazione.

Prendere nota di tutte le "aggiunte x al nome del modello" e modifiche simili al modello. Questi possono essere rimossi utilizzando:

rails d migration AddXToModelName 

Eseguire questa operazione per ogni migrazione oltre alla migrazione iniziale. Il seguente comando si occuperà della migrazione iniziale della creazione e dei file associati al modello:

rails d model ModelName 
Problemi correlati