Cambiar un tipo de columna de Date a DateTime durante la migración ROR
Necesito cambiar mi tipo de columna de date a datetime para una aplicación que estoy haciendo. No me importan los datos, ya que aún se están desarrollando.
¿Cómo puedo hacer esto?
5 answers
Primero en tu terminal:
rails g migration change_date_format_in_my_table
Luego en su archivo de migración:
Para Carriles > = 3.2:
class ChangeDateFormatInMyTable < ActiveRecord::Migration
def up
change_column :my_table, :my_column, :datetime
end
def down
change_column :my_table, :my_column, :date
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
2015-01-23 12:42:57
Además, si estás usando Rails 3 o posterior no tienes que usar los métodos up
y down
. Puedes usar change
:
class ChangeFormatInMyTable < ActiveRecord::Migration
def change
change_column :my_table, :my_column, :my_new_type
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
2016-11-16 04:51:13
En Rails 3.2 y Rails 4, la respuesta popular de Benjamin tiene una sintaxis ligeramente diferente.
Primero en tu terminal:
$ rails g migration change_date_format_in_my_table
Luego en su archivo de migración:
class ChangeDateFormatInMyTable < ActiveRecord::Migration
def up
change_column :my_table, :my_column, :datetime
end
def down
change_column :my_table, :my_column, :date
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
2017-05-23 12:02:48
Hay un método change_column, simplemente ejecútelo en su migración con datetime como un nuevo tipo.
change_column(:my_table, :my_column, :my_new_type)
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
2011-03-04 08:39:44
AFAIK, las migraciones están ahí para tratar de remodelar los datos que le interesan (es decir, la producción) al hacer cambios de esquema. Entonces, a menos que eso esté mal, y ya que dijo que no le importan los datos, ¿por qué no modificar el tipo de columna en la migración original de fecha a fecha y hora y volver a ejecutar la migración? (Espero que tengas pruebas:)).
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-11-01 13:48:27