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

Jay*_*een 19 postgresql rails-migrations ruby-on-rails-4

有一个很好的问题,在这里我想阐述一下.我试图将我的数据库中的列转换为字符串为整数.

我认为转换将是非常直接的转发.目前我的字符串是

["10", "12", "125", "135", "140", ...]
Run Code Online (Sandbox Code Playgroud)

我的迁移文件包括:

def change
    change_column :table_name, :product_code, :integer
end
Run Code Online (Sandbox Code Playgroud)

Rails尝试这个,但Postgresql回复了一个错误.

PG ::错误:错误:列"product_code"无法自动转换为类型integer
HINT:指定USING表达式以执行转换.

我不确定如何在rails迁移中使用这个'USING'表达式.

所以我认为转换非常简单.我应该使用什么作为USING表达式?

flo*_*ish 13

调整后的代码也支持转换空字符串:

change_column :table_name, :product_code, 
  "integer USING NULLIF(product_code, '')::int"
Run Code Online (Sandbox Code Playgroud)

空字符串变为NULL,变为0类型转换,这可能是您在这种情况下可以做的最好的.