¿Es correcto lo siguiente?En una migración de rieles, ¿cómo se puede eliminar el límite de un campo
change_column :tablename, :fieldname, :limit => null
¿Es correcto lo siguiente?En una migración de rieles, ¿cómo se puede eliminar el límite de un campo
change_column :tablename, :fieldname, :limit => null
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
.
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.
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
Cambie el tipo de columna a :text
. No tiene un límite.
change_column :tablename, :fieldname, :text, :limit => nil
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
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
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í.
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