Migración de Rails para columna de cambio
Tenemos la sintaxis script/generate migration add_fieldname_to_tablename fieldname:datatype
para agregar nuevas columnas a un modelo.
En la misma línea, ¿tenemos un script/generate para cambiar el tipo de datos de una columna? ¿O debo escribir SQL directamente en mi migración vanilla?
Quiero cambiar una columna de datetime
a date
.
7 answers
Creo que esto debería funcionar.
change_column :table_name, :column_name, :date
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-07 05:53:28
También puede usar un bloque si tiene varias columnas para cambiar dentro de una tabla.
Ejemplo:
change_table :table_name do |t|
t.change :column_name, :column_type, {options}
end
Consulte la documentación de la API en la clase de tabla para obtener más detalles.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-30 08:40:25
No sé si puede crear una migración desde la línea de comandos para hacer todo esto, pero puede crear una nueva migración, luego editar la migración para realizar este taks.
Si tablename es el nombre de la tabla, fieldname es el nombre de su campo y desea cambiar de un datetime fecha, usted puede escribir una migración a hacer esto.
Puede crear una nueva migración con:
rails g migration change_data_type_for_fieldname
Luego edite la migración para usar change_table:
class ChangeDataTypeForFieldname < ActiveRecord::Migration
def self.up
change_table :tablename do |t|
t.change :fieldname, :date
end
end
def self.down
change_table :tablename do |t|
t.change :fieldname, :datetime
end
end
end
Luego ejecute el migración:
rake db:migrate
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-11 20:20:17
Como encontré en las respuestas anteriores, se necesitan tres pasos para cambiar el tipo de columna:
Paso 1:
Genere un nuevo archivo de migración usando este código:
rails g migration sample_name_change_column_type
Paso 2:
Vaya a la carpeta /db/migrate
y edite el archivo de migración que realizó. Hay dos soluciones diferentes.
def change change_column(:table_name, :column_name, :new_type) end
2.
def up
change_column :table_name, :column_name, :new_type
end
def down
change_column :table_name, :column_name, :old_type
end
Paso 3:
No olvides hacer este comando:
rake db:migrate
He probado esta solución para Rails 4 y funciona bien.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-07 05:41:21
Solo genera migración:
rails g migration change_column_to_new_from_table_name
Actualizar la migración de esta manera:
class ClassName < ActiveRecord::Migration
change_table :table_name do |t|
t.change :column_name, :data_type
end
end
Y finalmente
rake db:migrate
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-02 16:16:42
Con Raíles 5
Desde Guías de carriles :
Si desea que una migración haga algo que Active Record no sabe cómo revertir, puede usar
reversible
:
class ChangeTablenameFieldname < ActiveRecord::Migration[5.1]
def change
reversible do |dir|
change_table :tablename do |t|
dir.up { t.change :fieldname, :date }
dir.down { t.change :fieldname, :datetime }
end
end
end
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-10 18:12:16
Otra forma de cambiar el tipo de datos usando migration
Paso 1: Debe eliminar el nombre del campo tipo de datos con errores mediante migration
Ex:
rails g migration RemoveFieldNameFromTableName field_name:data_type
Aquí no olvide especificar el tipo de datos para su campo
Paso 2: Ahora puede agregar campo con el tipo de datos correcto
Ex:
rails g migration AddFieldNameToTableName field_name:data_type
Eso es todo, ahora su tabla se agregará con el campo de tipo de datos correcto, ¡Feliz codificación ruby!!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-10 12:32:45