我正在将rails 3应用程序升级到rails 4.根据指南,我从模型中删除了这一行
serialize :my_serialized_column, ActiveRecord::Coders::Hstore.new({})
但现在我在循环:my_serialized_column
之前收到了错误,这是以前的哈希
未定义的方法`每个' for"":String
现在我的问题是如何在不丢失已有数据的情况下更改列的data_type
答案 0 :(得分:0)
因此,您只需将列的数据类型从string
更改为hstore
。
要记住的一件事是你需要将数据转换为hstore,否则你将收到以下错误
PG::DatatypeMismatch: ERROR: column "my_serialized_column" cannot be cast automatically to type hstore
HINT: You might need to specify "USING my_serialized_column::hstore".
为避免错误,您可以指定投射
class ChangeMySerializedColumnTypeToHstore < ActiveRecord::Migration
def up
change_column_null :my_table, :my_serialized_column, ''
change_column :my_table, :my_serialized_column, "hstore USING my_serialized_column::hstore"
end
def down
change_column :my_table, :my_serialized_column, :string, default: ''
end
end