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

时间:2010-08-21 09:10:33

标签: ruby-on-rails database string migration integer

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

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

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

这是否可以使用迁移?

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

谢谢,

丹尼

3 个答案:

答案 0 :(得分:40)

不要删除该列,请使用此

.square-cut{
  font-size: 0px; line-height: 0%; width: 0px;
  border-top: 20px solid purple;
  border-bottom: 20px solid purple;
  border-right: 40px solid white;
}

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

答案 1 :(得分:32)

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

但你可以尝试

change_column :people, :company_id, :integer

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

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

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

答案 2 :(得分:26)

其他答案是正确的,但您可以使用:using关键字更进一步:

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