Domanda sulla migrazione delle rotaie
-
10-07-2019 - |
Domanda
Ho 4 migrazioni correlate nella mia app Rails:
Le prime 3 migrazioni creano una tabella ciascuna in self.up e le rilasciano nei rispettivi metodi self.down.
4a migrazione esegue un'attività di rake che carica i dati su tutti e tre (in self.up). Sto pensando a cosa mettere in proprio di questa migrazione per eliminare le righe dalle 3 tabelle?
Sto sbagliando? Probabilmente avrebbe dovuto creare una migrazione in cui creo 3 tabelle e carico i dati in self.up e trascino tutte e tre le tabelle nel metodo self.down?
Soluzione
Questo è sbagliato!
Le migrazioni devono essere utilizzate solo per la migrazione dei tuoi dati Modello non i tuoi Dati .
Rails 2.3.4 aggiunge 'seed'. Questo è un file in db / seeds.rb contiene il codice ruby ??per "bootstrap" il database. Questo è un ottimo modo per creare contenuti semi-statici per il tuo database come categorie, tabelle di ricerca o account utente.
È quindi possibile caricare i dati seed con una semplice attività rake
rake db:seed
Altri suggerimenti
Non esiste davvero un modo giusto o sbagliato per farlo. Sulla base di ciò che hai fatto, la quarta migrazione dovrebbe semplicemente scaricare i dati nel suo metodo down. Ciascun down dovrebbe annullare solo le azioni up.
Il caricamento dei dati nella migrazione che crea la tabella non è certamente necessario. Se hai 3 tabelle che creano relazioni has_many o appartiene_a, avrebbe senso inserire i dati in una migrazione separata in modo da poter creare le relazioni e quindi utilizzarle nel caricamento dei dati.
A parte questo, se hai un'attività di rake per caricare dati, perché preoccuparsi di una migrazione che esegue quell'attività di rake? Rendi semplicemente l'esecuzione dell'attività di rake parte dell'installazione o semplicemente utilizza l'attività di rake per caricare o scaricare alcuni dati dimostrativi.
Generalmente mantengo concentrato il mio schema di migrazione e inserisco qualsiasi caricamento di dati in un'attività di rake che chiamo indipendentemente.