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

该表的当前数据库 struct 为:

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

使用迁移可以做到这一点吗?

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

谢谢

丹尼

推荐答案

不要删除该列,它将清除数据.

不过你可以试试

change_column :people, :company_id, :integer

如果company_id中的所有值都可以转换为integer,那就没问题了.

如果情况并非如此(即并非所有字符串都可以在默认情况下进行转换),那么您可以分两步进行:1)创建一个新列,然后在转换后在其中加载company_id.2) 删除公司id,然后重命名新列.

这两种方法都要小心(第二种方法更要小心),如果可以的话,可能应该先在数据库的副本上执行.

Ruby-on-rails相关问答推荐

在VP中部署rails 7和nginx

Rails 7,返回具有两个单独条件的活动记录关联,一个在父级,一个在子级

Rails 和 jsonb 类型jsonb不存在

如何在 Rails 3 中使用 Capybara 单击具有相同文本的第二个链接?

rails s和bundle exec rails s有什么区别?

你能从 Heroku dynos/workers 中获得多少性能?

Rails:保存子对象时更新父对象

Rails 4 Form: has_many through: checkboxes

禁用 RVM 或使用没有 RVM 安装的 Ruby?

RSpec > 有没有办法用一个命令运行所有测试?

mongoid 中 embeds_many 和 has_many 的区别

Ruby on Rails:有条件地显示部分

如何解决弃用警告方法 to_hash 已弃用并将在 Rails 5.1 中删除

如何获取包含表的列名的数组

错误未初始化的常量 AWS (NameError)

参数错误:范围主体需要可调用

登录delay_job?

我怎样才能看到水豚在失败的黄瓜步骤中发现了什么?

您如何查看 ruby​​ 中的调用堆栈示例?

我如何为 Rails3/Bundler 供应 gems