将列类型更改为整数栏

时间:2016-03-20 13:33:35

标签: ruby-on-rails

我尝试将heroku表列从字符串更改为整数时运行了迁移: 这是我的迁移:

class ChangePriceTypeInItems < ActiveRecord::Migration
  def change
    change_column :items, :price, :integer
  end
end

这是我的错误: 我该怎么办?

ActiveRecord::StatementInvalid: PG::Error: ERROR:  column "price" cannot be cast automatically to type integer
HINT:  You might need to specify "USING price::integer".
: ALTER TABLE "items" ALTER COLUMN "price" TYPE integer

4 个答案:

答案 0 :(得分:8)

其他答案都是正确的,但您也可以使用:using关键字:

change_column :items, :price, :integer, using: 'price::integer'

答案 1 :(得分:2)

如果您确定字符串列中的数据可以转换为整数,那么请继续对迁移进行此更改:

change_column :items, :price, 'integer USING CAST(price AS integer)'

答案 2 :(得分:2)

使用此代码:

 change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'

有关详细信息,请访问此网站how-to-change-columns-from-string-to-integer

答案 3 :(得分:0)

class ChangePriceTypeInItems < ActiveRecord::Migration
  safety_assured

  def change
    # Take the back-up of your data first
    Item.update_all(price: nil)
    change_column :items, :price, :integer, using: 'price::integer'
  end
end