【发布时间】:2011-03-20 18:49:04
【问题描述】:
当我将 Array 或 Hash 分配给 Mongo 文档的属性时,它会正确 序列化,但 Symbols 用作 Hash 键时除外。简单例子:
irb>MyMongoModel.create :some_attr => {:a => [:b,:c]}
=> #<MyMongoModel _id: 4d861c34c865a1f06a000001, some_attr: {:a=>[:b, :c]}>
irb>MyMongoModel.last
=> #<MyMongoModel _id: 4d861c34c865a1f06a000001, some_attr: {"a"=>[:b, :c]}>
请注意,some_attr 被检索为 {"a"=>[:b, :c]},而不是
{:a=>[:b, :c]}
嵌套哈希也会发生这种情况(例如,在数组或其他哈希内部)。有没有办法在这种情况下保留符号?
解决方案
我使用 YAML 在存储之前手动序列化 some_attr - YAML.dump(或 Object#to_yaml),并在读取属性后使用 YAML::load。 YAML 更好地保留了序列化对象。 ActiveRecord 正在使用 YAML 在ActiveRecord::Base 上实现其serialize 类方法。
【问题讨论】:
-
什么 rails 和 ruby 版本?我的 Rails 3.0.5 和 Ruby EE 运行良好
-
感谢 YAML 提示。我正在使用带有符号键和任意对象作为值的键/值集合。使用 YAML 进行序列化非常适合。
标签: ruby-on-rails ruby mongodb mongoid