我需要为我正在制作的应用程序更改我的列类型从日期到日期时间。我不关心数据,因为它仍在开发中。

我该怎么做呢?


这里有一个change_column方法,只需在迁移中使用datetime作为新类型执行它。

change_column(:my_table, :my_column, :my_new_type)

首先在您的终端:

rails g migration change_date_format_in_my_table

然后在你的迁移文件中:

对于Rails >= 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

此外,如果您使用的是Rails 3或更新版本,则不必使用up和down方法。你可以用change:

class ChangeFormatInMyTable < ActiveRecord::Migration
  def change
    change_column :my_table, :my_column, :my_new_type
  end
end

在Rails 3.2和Rails 4中,Benjamin的流行答案在语法上略有不同。

首先在您的终端:

$ rails g migration change_date_format_in_my_table

然后在你的迁移文件中:

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

AFAIK,在进行模式更改时,迁移是为了试图重塑您所关心的数据(即生产)。因此,除非这是错误的,而且既然他确实说过他不关心数据,为什么不修改原始迁移中的列类型,从date到datetime,然后重新运行迁移呢?(希望你有测试:))。