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?

Author: Luke Peterson, 2011-03-04

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
 496
Author: apneadiving,
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
 75
Author: Lee McAlilly,
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
 38
Author: Thomas Klemm,
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)
 23
Author: Nikita Rybak,
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:)).

 1
Author: fakeleft,
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