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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top