2011-01-07 12 views
8

Sono abbastanza nuovo su Ruby on Rails e mi chiedevo se esistesse un modo per modificare lo schema del database per un modello.Modifica modello Rails da Command Line

Per esempio, ho il modello abbonato nella mia applicazione - il modo in cui ho creato è stato utilizzando rails generate scaffold Subscriber email:string

Ma ora, voglio un nome nel modello abbonato pure. C'è un modo semplice per farlo? Ho inserito molto codice nei miei controller e viste correnti, quindi non voglio necessariamente distruggere lo scaffold, ma vorrei modificare il modello.

Grazie in anticipo,

hwrd

P.S. Utilizzo Ruby on Rails 3

+1

lettura http: //guides.rubyonrails .org/active_record_migrations.html dovrebbe essere molto utile. – Hong

risposta

12

Un modello ActiveRecord ispeziona la tabella che rappresenta. In realtà non è necessario modificare il modello solo per aggiungere un nuovo campo (a meno che non si vogliano aggiungere validazioni, ecc.).

Che cosa si vuole fare è fare una nuova migrazione e quindi migrare il database fino:

rails g migration AddNameToSubscribers name:string 
rake db:migrate 

allora si può iniziare riferimento al campo del nome nel vostro controller e punti di vista.

(Questo comando generatore potrebbe sembrare un po 'magica, ma il generatore di rotaie riconosce questo formato e genererà il codice add_column e remove_column appropriata Vedere la Rails migration guide per ulteriori approfondimenti..)

+1

Ma le vecchie colonne nel DB non occupano ancora spazio? Non ho guardato in questo modo però. È un buon punto. – hwrdprkns

+0

@hwrdprkns: Sì, occupano ancora spazio. Non sono sicuro di cosa stai chiedendo. Questo comando aggiungerà il campo 'name' alla tabella' subscribers'. Non è quello che volevi? –

+1

Le vecchie colonne non sono state cancellate, quindi occuperanno ancora spazio. La migrazione sopra è solo l'aggiunta di una colonna alla tabella dei destinatari, questo è tutto. – Zabba

2

Se si intende modificare lo schema del database del modello, è consigliabile utilizzare le migrazioni.

Potrai fare le cose come

add_column :city, :string 
remove_column :boo 

http://guides.rubyonrails.org/migrations.html

Se intendi solo trovare i modelli e l'aggiornamento dei dati all'interno di ogni istanza, vai con la risposta di @ apneadiving.

+0

Grazie per la pronta risposta. Intendo cambiare lo schema del database - mi spiace di non averlo chiarito. Dopo questo comando, il mio schema verrà aggiornato per sempre? Inoltre, come solo una nota a margine - remove_column cancella anche tutti/tutti i dati nella colonna per quel modello? – hwrdprkns

+0

@hwrdprkns, quando una colonna viene rimossa da una tabella, tutti i dati vengono persi. E quello che @Jesse Wolgamott sta dicendo è essenzialmente la stessa cosa che ha detto @Josh Lindsey .. – Zabba

+0

Scusate se ho votato, non volevo! Se modifichi la tua risposta, la voterò di nuovo! – hwrdprkns