使用迁移更改字段类型

时间:2017-07-11 12:29:20

标签: postgresql migration ruby-on-rails-5

我有一个Info表,其中age字段为int

但我想将类型更改为date,以便我可以动态计算年龄。

所以我做了这次迁移:

class ChangeDateFormatInInfo < ActiveRecord::Migration[5.0]
  def change
    change_column :infos, :age, :date
  end
end

但是有一个DatatypeMismatch

column "age" cannot be cast automatically to type date

所以我把它改成了:

change_column :infos, :age, :date, 'USING age::date'

但它仍然给了我

migrateTypeError: no implicit conversion of Symbol into Integer

我没有真正理解它,我告诉它转换它,所以我做错了什么?

2 个答案:

答案 0 :(得分:1)

您必须首先删除该列,然后使用新数据类型再次添加该列。

请尝试以下代码:

rails g migration ChangeDateFormatInInfo

然后转到db/migrate/change_date_format_in_info_xxxx.rb文件并打开它。

在迁移文件中添加以下代码:

class ChangeDateFormatInInfo < ActiveRecord::Migration[5.0]
  def change
    remove_column :infos, :age
    add_column :infos, :age, :date
  end
end

然后运行命令:

rake db:migrate

答案 1 :(得分:0)

没有考虑过这个问题,我只是进行了迁移以放弃该字段,另一个用于添加字段。现在完成:)

rails g migration remove_age_from_info age:integer

rails g migration add_age_to_info age:date