2010-06-26 12 views
7

Diciamo che ho usato il seguente comando per creare un modello "utente":Aggiornamento modelli in Rails/migrazioni

script/generate model User username:string 

Questo crea il file user.rb insieme al file di migrazione rb per creare la tabella Utenti. Ora, voglio aggiungere una colonna email al mio modello utente. Qual è il modo migliore per farlo? Lo faccio manualmente e scrivo il file di migrazione a mano o c'è una scorciatoia per farlo? Se scrivo la migrazione a mano, devo nominarla allo stesso modo del precedente script di migrazione (con un timestamp in primo piano) per garantire che venga eseguito dopo la migrazione precedente?

risposta

6

Non preoccuparti del timestamp. Sarà generato automaticamente. Si può fare un

script\generate migration add_email_to_user email:string 

Questo creerebbe automaticamente un file di migrazione, che sarebbe simile a questa:

class AddEmailToUser < ActiveRecord::Migration 
    def self.up 
    add_column :email, :string 
    end 

    def self.down 
    remove_column :email 
    end 
end 

il file avrebbe il timestamp nel formato YYYYMMDDHHMMSS (per Rails 2.1 e superiori) allegata di fronte al nome del file.

2

Guide contiene informazioni sulla generazione di migrazioni. Se si utilizza il generatore di rotaie, creerà i file denominati in modo corretto:

ruby script/generate migration AddEmailToUser email:string 
1

Ebbene si può fare due cose:

1) Se non è ancora stato distribuito questo ovunque, o non ti dispiace scaricare il db ed eseguire nuovamente le migrazioni, quindi modificare il file. Rimuovi le tabelle dal tuo db ed esegui db: migrate. Facile da fare questo in fase di sviluppo.

2) Se questa applicazione è in produzione, o non si desidera eliminare tutte le tabelle. Quindi creare un nuovo file di migrazione. Quindi in questa nuova migrazione aggiungi/modifica/rilascia la colonna. Quindi esegui db: migrate e le nuove modifiche avranno effetto nella tabella. Questa è la migliore pratica.

Come per la denominazione della migrazione, i timestamp vengono utilizzati perché i binari creeranno una tabella che tiene traccia delle ultime migrazioni eseguite. Per questo, è meglio usare i timestamp. Ma se si sceglie, è possibile utilizzare la propria convenzione anziché i timestamp. Magari chiamarli 001_migration.rb, 002_migration.rb, ecc.

Sperare che aiuti.

Problemi correlati