4

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

调用#attributes#raw_attributes返回Moped::BSON::Document。虽然它实际上延伸Hash几种哈希方法无法按预期工作。特别是#except返回 unmodified self,而不是去掉给定键的散列.

更新Moped::BSON::Document正确继承Hash. 我试图用符号而不是字符串来命名属性,这就是为什么#except不起作用。很快:做except('pictures'),不做except(:pictures)

4

2 回答 2

11
Hash[e.attributes]

其中 e 是您的模型实例

于 2013-02-21T15:52:33.477 回答
4

我很抱歉碰到这么老的东西,但我想把这个留给我自己和所有未来遇到同样问题的人。我正在使用 Mongoid ORM for Rails,它在内部使用 Moped 与 MongoDB 交互。

这个 gem 现在为我节省了数小时手动将内容转换为Hashor的HashWithIndifferentAccess时间:https ://github.com/mindscratch/mongoid-indifferent-access 。

本质上,它似乎有某种预返回钩子,可以自动将来自 MongoDB 的所有文档转换为 type HashWithIndifferentAccess

不是在这方面寻找积分。只是想把它留在这里,因为它是这个问题的最高谷歌结果,它让我免于发疯。

于 2014-03-28T21:07:50.620 回答