Когда я назначаю массив или хэш атрибуту документа Mongo, он сериализуется должным образом, за исключением символов, когда они используются в качестве ключей хеша.Простой пример:
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 для реализации метода класса serialize
на ActiveRecord::Base
.