我有一个带有序列化 Hash 属性的 Rails 模型类,如下所示:
class Action
serialize :metadata, Hash
# . . .
end
该列存储在text
具有 YAML 编码的列中。问题是,当我将metadata
值传递给create!
方法时,哈希键会从符号转换为字符串,但其他时候不会发生这种转换。例如:
$ rails console
> a = Action.create!(:metadata => {:foo => "bar"})
> a.metadata
=> {"foo"=>"bar"}
> a.metadata[:fizz] = "buzz"
> a.metadata
=> {"foo"=>"bar", :fizz=>"buzz"}
现在,当我保存模型时,数据库将具有以下文本值:
---
foo: bar
:fizz: buzz
任何建议如何解决这个问题?
(这适用于 Rails 3.0.16。)