在Ruby哈希中提取`Moped :: BSON :: Document`属性

时间:2013-02-21 15:39:58

标签: ruby-on-rails ruby mongoid

在Mongoid 3.0.21中,如何将所有模型的属性作为纯Ruby Hash

调用#attributes#raw_attributes会返回Moped::BSON::Document。虽然它实际上扩展了Hash,但是几个哈希方法不能按预期工作。特别是#except返回未经修改的self,而不是散列给定的键

更新Moped::BSON::Document正确继承了Hash的行为。我试图用符号命名属性,而不是字符串,这就是为什么#except没有工作的原因。简而言之:做except('pictures'),而不是except(:pictures)

2 个答案:

答案 0 :(得分:11)

Hash[e.attributes]

其中e是您的模型实例

答案 1 :(得分:4)

我为这么老的东西而道歉,但是我想把这个留给我自己以及遇到同样问题的所有未来的人。我正在使用Mongoid ORM for Rails,它在内部使用Moped来与MongoDB进行交互。

此宝石现在为我节省了数小时的手动转换为HashHashWithIndifferentAccesshttps://github.com/mindscratch/mongoid-indifferent-access

基本上它似乎有某种预返回钩子,它自动将来自MongoDB的所有文件转换为HashWithIndifferentAccess类型。

不寻找这一点。只是想把它留在这里,因为它是这个问题的谷歌最高结果,它让我免于疯狂。