2012-10-10 23 views
5

Ho un'app per rails che ha una tabella particolare in cui i dati e anche la struttura sono generati dinamicamente al di fuori di rails e ruby. Questo è in base alla progettazione, è una tabella speciale in cui la struttura è autonoma dal resto della registrazione e delle relazioni attive. I modelli che funzionano su di esso sono anche atomici. Di nuovo tutto in base al design e mirato. Non voglio una struttura specifica per questa tabella, il che significa che i nomi delle colonne e il numero di colonne possono cambiare ogni volta che la tabella viene inizializzata. Se sono presenti modifiche alla struttura della tabella, posso gestire le modifiche alla mia classe del modello.Rails che creano una tabella senza migrazione

Il mio problema è che il processo di migrazione rotaie sembra mettersi in cammino, e non voglio avere a tenere un passo avanti e indietro tra la migrazione e ripristino, solo per ottenere lo stato di questo singolo ripristino tavolo.

Il comportamento che sto cercando è letteralmente ogni volta che "genera" i dati per questa tabella. Voglio eliminare la tabella che potrebbe già esistere (in tutti gli ambienti: produzione, sviluppo e test).

Esiste un modo chiaro per aggirare il processo di migrazione? Oppure creare una migrazione speciale indipendente dalla sequenza di altre migrazioni nell'app?

L'intero database non è disponibile, ma questa tabella è.

Pensieri su come potrei ottenere questo comportamento?

Rails 3, database PostgreSQL, controllo di versione git, Heroku che ospita

risposta

2

Penso che la risposta è semplice: "Non usare migrazioni" - sono progettati per aiutare a estendere relativamente garbo uno schema di database altrimenti statica. Una migrazione fa molte cose oltre a generare/eseguire la DDL (Data Definition Language) del tuo database - sa come andare avanti e indietro, conosciuto da un collegamento tra codice sorgente (schema.rb) e dati (nella tabella schema_migrations) come determinare quali migrazioni devono essere eseguite e così via. Tutto ciò di cui hai bisogno è la parte che esegue il DDL (che dopotutto è solo una specie di SQL).

E almeno una parte di questa parte è here in the TableDefinition API. Tutta l'infrastruttura di cui potresti aver bisogno sembra essere presente.

+0

Credo che è davvero così semplice Grazie. –

2

È possibile installare questo come un compito rastrello (suona come quello che si utilizza come) che contiene il codice SQL/rotaie comandi utilizzati per costruire la tabella, simile a quello che si fa con rake db:seed

+0

Ha funzionato. Ho solo messo tutto il codice in un rake task e posso cambiarlo tutte le volte che mi serve. Grazie. –

Problemi correlati