2009-11-02 10 views
35

He creado una nueva tabla que incluye una columna "nota". El valor predeterminado es varchar (255) Creo, pero deseo que esta columna sea un área de texto frente a un campo y para permitir más datos. Me imagino que haría este cambio en el archivo ActiveRecord :: Migration, pero tengo curiosidad sobre el formato. ¿Simplemente cambio el varchar (255) a varchar (1000) por ejemplo? (Si es así cuál es el formato?varchar Pregunta de migración para Ruby on Rails

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

es que el formato correcto? Además, ¿cómo consigo el campo de entrada para ser varias filas. Lo siento si esto es algo fácil, pero yo soy nuevo en la programación y RoR. gracias.

Respuesta

21

puede simplemente usar el tipo de 'texto' en lugar de 'cadena'.

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

el uso del tipo 'texto' se traducirá en la columna de la base de datos de tipo TEXT. Varchar se suele limitar a un máximo longitud de 255 (en MySQL, otros RDBMS tienen límites similares).

Si utiliza los helpers de Rails, se generará un textarea para este campo (porque es de tipo 'texto'). textarea es el elemento de formulario que acepta entrada de varias líneas.

Editar: Si ya ha realizado la migración del create_table, puede crear una nueva migración para cambiar el tipo de columna:

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

¿Puedo cambiar el archivo ..._ create_notes.rb que se generó originalmente? Entonces haga rake db: migrar para implementar este cambio? ¿O eso causará problemas y debería eliminar una columna anterior o un cambio? – bgadoci

+0

Si ya ha migrado, debe abandonar la base de datos, volver a crearla y migrarla (lo que destruye todos los datos de la base de datos) o necesita cambiar las columnas como sugiere Ben. De lo contrario, si aún no ha migrado, simplemente cambie la línea en su migración y ejecute la migración. – EmFi

+0

@bgadoci: si nunca ha llamado a db: migrate después de generar esta migración, puede simplemente editar el archivo antes de llamar a db: migrate. De lo contrario, puede crear una nueva migración para realizar el cambio: def self.up change_column: notes,: note,: text end –

27

Puede cambiar la longitud con la opción de límite como tan ...

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

¿Tengo que hacer este cambio primero a través del terminal ejecutando un comando script/generate migration ... y luego edito el nuevo archivo? ¿O puedo simplemente abrir el archivo de migración original y cambiar, guardar y rastrear db: migrate? – bgadoci

+0

Si esta es una de las últimas tablas creadas, se encuentra en modo de desarrollo, etc., y luego retrocede. Compruebe schema.rb para ver que las columnas ya no aparecen en la lista, edite la migración y ejecute db migrate nuevamente. Esto no funcionará si tiene datos en el campo, etc. –

+1

Esta es la respuesta correcta si desea mantener un varchar, tenga en cuenta que necesita MySQL 5.0.3 o superior para usar un límite superior a 255 (http://dev.mysql.com/doc/refman/5.0/en/char.html) – Kris

7

Ya que tenía una gran cantidad de datos ya almacenados Solía ​​

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

Si dejo la opción: limit => nil, el tipo de columna cambiará de varchar a text, pero aún tendrá una longitud máxima de 255 caracteres.

+0

gracias! no fue escrito en ninguna parte ... – nurinur