【问题标题】:Changing a field type with a migration通过迁移更改字段类型
【发布时间】:2017-07-11 12:29:19
【问题描述】:

我有一个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

我真的不明白,我告诉它转换它,那我做错了什么?

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      没想到,我只是做了一个迁移来删除字段,另一个迁移来添加字段。现在完成:)

      rails g migration remove_age_from_info age:integer
      
      rails g migration add_age_to_info age:date
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-01
        • 1970-01-01
        • 2019-08-18
        • 2014-05-01
        • 2013-11-19
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多