Rails迁移将字符串转换为整数?

是否可以将字符串的字段更改为整数而不清除已输入的数据?

有问题的表的当前db结构是:

create_table :people do |t| t.string :company_id 

这可能是使用迁移吗?

我想也许在迁移中删除旧字段,创建一个整数的新字段 – 但我担心这将清除已经输入的所有数据。

谢谢,

丹尼

不要删除列,它将清除数据。

不过你可以试试

 change_column :people, :company_id, :integer 

如果company_id所有值都可以转换为integer ,那么应该没问题。

如果不是这种情况(即默认情况下不能转换所有字符串),那么您可以分两步完成:1)创建一个新列,然后在转换后将company_id加载到那里。 2)删除company_id,然后重命名新列。

您应该小心使用这两种方法(对于第二种方法更是如此),如果可以的话,您应该首先在数据库的副本上执行此操作。

不要掉落列,使用它

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

你从PostgreSQL获得的“提示”基本上告诉你,你需要确认你是否希望这种情况发生,以及如何转换数据。 要确认更改,请在迁移中使用上面的块

其他答案是正确的,但您可以使用以下方法更进一步:using keyword:

 change_column :people, :company_id, :integer, using: 'company_id::integer'