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

时间:2016-02-02 21:05:59

标签: ruby-on-rails enums

如果我有一个生产数据库,其中“types”存储为字符串,但我想将该列转换为enum的整数。

我用google搜索/ SO'd,我发现我可以CAST,但不确定这究竟是什么。

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

请指教!

1 个答案:

答案 0 :(得分:7)

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

迁移将如下所示:

class FixTypes < ActiveRecord::Migration
  def change
    rename_column :table_name, :types, :old_types
    add_column :table_name, :types, :integer
  end
end

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

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

然后删除“old_types”列。