Rails迁移,从字符串转换为枚举

Kev*_*own 2 enums ruby-on-rails

如果我有一个生产数据库,其中"类型"存储为字符串,但我想将该列转换为整数enum.

我用google搜索/ SO'd,我看到我可以CAST,但不确定那究竟是什么.

如果它不难,我会喜欢使用rails enum,但除此之外,也许我应该坚持我的字符串架构......

请指教!

ami*_*ena 7

您可以重命名现有列,创建一个名为"types"(整数)的新列,然后编写一个脚本,在新列中存储适当的整数值,然后删除旧列.

迁移将如下所示:

class FixTypes < ActiveRecord::Migration
  def change
    rename_column :table_name, :types, :old_types
    add_column :table_name, :types, :integer
  end
end
Run Code Online (Sandbox Code Playgroud)

然后编写一个脚本,根据"old_types"设置"类型"的值:

Model.all.each do |entry|
  entry.types = %w(status1 status2 status3 status4).index(entry.old_types)
  entry.save!
end
Run Code Online (Sandbox Code Playgroud)

然后删除"old_types"列.