Ruby on rails 重命名单表继承rails模型类名,而不更改现有数据

Ruby on rails 重命名单表继承rails模型类名,而不更改现有数据,ruby-on-rails,rails-activerecord,single-table-inheritance,Ruby On Rails,Rails Activerecord,Single Table Inheritance,我有一个ActiveRecordSTI子类要重命名(区分大小写的更改) 但是如果我更改子类ActiveRecord的类名,则无法再实例化现有记录,因为旧类名位于基表的type列中 如何在不更改数据库中的内容的情况下更改类的名称,以便重命名的影响最小 例如: 类Uld

我有一个
ActiveRecord
STI子类要重命名(区分大小写的更改)

但是如果我更改子类
ActiveRecord
的类名,则无法再实例化现有记录,因为旧类名位于基表的
type
列中

如何在不更改数据库中的内容的情况下更改类的名称,以便重命名的影响最小

例如:

Uld
应成为
Uld
。重命名方法需要数据库迁移

def up
组件。其中(类型:“Uld”)。全部更新(类型:“Uld”)
结束
降下
组件。其中(类型:“ULD”)。全部更新(类型:“ULD”)
结束

但是在heroku上部署时,这会引起问题,因为数据更改是第一位的,代码甚至没有可用的新类名。因此,代码库的这一部分在几分钟内不可用。对于用户甚至都不关心的更改来说,这并不好://

您可以这样做:

  • 创建
    ULD
    组件/文件,该文件是
    ULD
    的副本。也就是说,有2个组件,不要移除
    Uld
  • 在您以前提取
    Uld
    的地方,请确保现在提取类型为
    Uld
    Uld
    的记录
  • 在您创建新的
    Uld
    记录的地方,请创建新的
    Uld
    记录
  • 在不进行任何迁移的情况下部署这些更改,这样您的服务器将向后兼容
    Uld
    ,但也可以使用
    Uld
  • 立即部署迁移
  • 最后,删除与旧的
    Uld
    相关的所有提及/文件,然后重新部署