2009-11-02 9 views
35

Ho creato una nuova tabella che include una colonna "note". L'impostazione predefinita è varchar (255), ma credo che questa colonna sia un'area di testo rispetto a un campo e per consentire più dati. Immagino che avrei apportato questa modifica nel file ActiveRecord :: Migration ma sono curioso riguardo al formato. Per esempio, cambio semplicemente varchar (255) in varchar (1000)? (In caso affermativo qual è il formato?varchar Domanda di migrazione per Ruby on Rails

def self.up 
    create_table :notes do |t| 
     t.string :note :varchar(1000) 
    end 

è che il formato giusto? Inoltre, come faccio a ottenere il campo di immissione per essere più righe. Scusate se questa è roba facile, ma io sono nuovo di programmazione e RoR. grazie.

risposta

21

si può semplicemente utilizzare il tipo di 'text' invece di 'stringa'.

def self.up 
    create_table :notes do |t| 
    t.text :note 
    end 
end 

Utilizzando il tipo di 'text' si tradurrà in colonna del database di tipo text. Varchar è di solito limitata ad un massimo lunghezza di 255 (in MySQL, altri RDBMS hanno limiti simili)

Se si utilizzano gli helper dei moduli di Rails, per questo campo verrà emessa un'area di testo per questo campo (poiché è di tipo "testo"). textarea è l'elemento del modulo che accetta l'input su più righe.

Edit: Se hai già migrato il CREATE_TABLE, è possibile creare una nuova migrazione di cambiare il tipo di colonna:

def self.up 
    change_column :notes, :note, :text 
end 
+0

Posso solo modificare il file ..._ create_notes.rb che è stato originariamente generato? Quindi esegui rake db: esegui la migrazione per implementare questa modifica? O questo causerà problemi e dovrei fare una rimozione della vecchia colonna o una modifica? – bgadoci

+0

Se è già stata eseguita la migrazione, è necessario rilasciare il database, ricrearlo e migrare (che distrugge tutti i dati nel database) oppure è necessario modificare le colonne come suggerito da Ben. Altrimenti, se non hai ancora effettuato la migrazione, modifica la linea nella migrazione ed esegui la migrazione. – EmFi

+0

@bgadoci: se non hai mai chiamato db: migrate dopo aver generato questa migrazione, puoi semplicemente modificare il file prima di chiamare db: migrate. In caso contrario, è possibile creare una nuova migrazione per apportare la modifica: def self.up change_column: note,: nota,: testo fine –

27

È possibile modificare la lunghezza con l'opzione limite così ...

def self.up 
    change_column :notes, :note, :string, :limit => 1000 
end 
+0

Devo prima eseguire questa modifica attraverso il terminale eseguendo un comando script/generate migrazione ... e quindi modificare il nuovo file? O posso semplicemente aprire il file di migrazione originale e modificare, salvare e rake db: migrate? – bgadoci

+0

Se si tratta di una delle ultime tabelle create, si è in modalità sviluppo, ecc., Quindi rollback. Controlla schema.rb per vedere le colonne non sono più elencate, quindi modifica la migrazione ed esegui di nuovo migrazione db. Questo non funzionerà se si hanno dati nel campo, ecc. –

+1

Questa è la risposta corretta se si desidera mantenere un varchar, si noti che è necessario MySQL 5.0.3 o superiore per utilizzare un limite maggiore di 255 (http://dev.mysql.com/doc/refman/5.0/en/char.html) – Kris

7

Da quando ho avuto un sacco di dati già memorizzati ho usato

self.up 
    change_column :notes, :note, :text, :limit => nil 
end 

Se avessi lasciato fuori l'opzione: limit => nil, il tipo di colonna sarebbe cambiato da varchar a testo, ma aveva ancora una lunghezza massima di 255 caratteri.

+0

grazie! non è stato scritto da nessuna parte .. – nurinur