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