2010-08-14 13 views

Respuesta

90

Si ha especificado previamente un límite en una migración y quieren eliminar sólo el límite, sólo puede hacer esto:

change_column :users, :column, :string, :limit => 255 

255 es la longitud estándar para una columna de cadena, y los rieles simplemente eliminarán el límite que usted especificó previamente.

Actualizado:

Aunque esto funciona en una serie de versiones de Rails, probablemente sería más adecuado utilizar nil como en la respuesta de Giuseppe.

change_column :users, :column, :string, :limit => nil 

Eso significa que lo único que estaba haciendo mal estaba usando null en lugar de nil.

0

Cadenas sin límite no es algo que la mayoría de las bases de datos de soporte: se tiene que especificar el tamaño en varchar(SIZE) definición.
Aunque podría intentarlo, yo personalmente iría con :limit => BIG_ENOUGH_NUMBER. También puede considerar usar el tipo CLOB para textos muy grandes.

0

Para que sea DB-controlador independiente uno debe escribir algo bajo la siguiente manera:

add_column :tablename, :fieldname_tmp, :text 
Tablename.reset_column_information 
Tablename.update_all("fieldname_tmp = fieldname") 
remove_column :tablename, :fieldname 
rename_column :tablename, :fieldname_tmp, :fieldname 
3

Cambie el tipo de columna a :text. No tiene un límite.

change_column :tablename, :fieldname, :text, :limit => nil 
+1

esto es incorrecto ...si simplemente cambia de: cadena a: texto, rake db: migrate dejará el límite en su lugar, lo que ensuciará las cosas cuando intente hacer heroku rake db: schema: load – jpwynn

34

Esto es lo que me sucedió a mí.

me di cuenta de que un campo de cadena que tenía en una mesa no era suficiente para mantener su contenido, lo que generó una migración que contenía:

def self.up 
    change_column :articles, :author_list, :text 
end 

Después de ejecutar la migración, sin embargo, el esquema tenía:

create_table "articles", :force => true do |t| 
    t.string "title" 
    t.text  "author_list", :limit => 255 
end 

Lo que no estaba bien. Entonces yo "redid" la migración de la siguiente manera:

def self.up 
    # careful, it's "nil", not "null" 
    change_column :articles, :author_list, :text, :limit => nil 
end 

Esta vez, el límite se había ido en schema.rb:

create_table "articles", :force => true do |t| 
    t.string "title" 
    t.text  "author_list" 
end 
+0

Para mí necesitaba rake db: migrate: reset para realmente cambiar el límite, y uno debe tener cuidado con ese comando, porque se cae la base de datos. – p1100i

0

que era el mismo barco hoy en día, se trata de eliminar un límite I se agregó a un campo de texto y no tomaría. Intenté varias migraciones.

rieles 4.2.7.1 Rubí 2.3.1p112

Al final, lo único que funcionó fue que especifica un límite de 255. tratando de adaptarse a cualquier otra cosa no funcionaría para mí.

Cuestiones relacionadas