Символы, используемые в качестве ключей хеширования, преобразуются в строки при сериализации

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

7
задан mxgrn 21 March 2011 в 08:21
поделиться