在ROR迁移期间将列类型从Date更改为DateTime

时间:2011-03-04 08:37:00

标签: mysql ruby-on-rails ruby ruby-on-rails-3 migration

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

我该怎么做?

5 个答案:

答案 0 :(得分:497)

首先在您的终端:

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

答案 1 :(得分:77)

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

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

答案 2 :(得分:39)

在Rails 3.2和Rails 4中,Benjamin的popular answer语法略有不同。

首先在您的终端:

$ 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

答案 3 :(得分:23)

有一个change_column方法,只需在迁移过程中执行它,并将datetime作为新类型。

change_column(:my_table, :my_column, :my_new_type)

答案 4 :(得分:1)

AFAIK,迁移可以在进行架构更改时尝试重塑您关心的数据(即生产)。因此,除非这是错误的,并且因为他确实说他不关心数据,为什么不在原始迁移中修改从日期到日期时间的列类型并重新运行迁移? (希望你有测试:))。