Pregunta de migración de varchar para Ruby on Rails
-
12-09-2019 - |
Pregunta
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 vs.un campo y permitir más datos.Me imagino que haría este cambio en el archivo ActiveRecord::Migration pero tengo curiosidad sobre el formato.¿Simplemente cambio varchar(255) a varchar(1000), por ejemplo?(si es así ¿cuál es el formato?
def self.up
create_table :notes do |t|
t.string :note :varchar(1000)
end
¿Es ese el formato correcto?Además, ¿cómo consigo que el campo de entrada tenga varias filas?Lo siento si esto es fácil, pero soy nuevo en programación y RoR.Gracias.
Solución
Usted puede simplemente utilizar el tipo de 'texto' en lugar de 'cadena'.
def self.up
create_table :notes do |t|
t.text :note
end
end
Uso del tipo 'texto' resultará en la columna de la base de datos de Tipo de texto. Varchar se limita generalmente a una longitud máxima de 255 (en MySQL, otros RDBMS tienen límites similares).
Si utiliza Rieles helpers de formularios, un área de texto se emitirá durante este campo (porque es de tipo 'texto'). área de texto es el elemento de forma que acepte la entrada multi-línea.
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
Otros consejos
El formato correcto sería
t.string :note, :limit => 1000
asegurarse de que está utilizando una versión de MySQL (o cualquier base de datos) que soporta varchars más de 256 caracteres.
Si desea utilizar un bloque grande de texto sería
t.text :note
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters /TableDefinition.html para más información
Puede cambiar la longitud con la opción límite así que ...
def self.up
change_column :notes, :note, :string, :limit => 1000
end
Como ya tenía muchos datos almacenados, utilicé
self.up
change_column :notes, :note, :text, :limit => nil
end
Si dejé de lado la opción :limit => nil, entonces el tipo de columna cambiaría de varchar a texto, pero aún tenía una longitud máxima de 255 caracteres.