在Mongoid 3.0.21中,如何将模型的所有属性作为一个普通的Ruby Hash
?
调用#attributes
或#raw_attributes
返回Moped::BSON::Document
。虽然它实际上扩展了Hash
,但
#except
返回未修改的self
,而不是剥离更新:Moped::BSON::Document
正确继承了Hash
的行为。我试图用符号而不是字符串来命名属性,这就是#except
不起作用的原因。很快:做except('pictures')
,而不是except(:pictures)
。
Hash[e.attributes]
其中e是您的模型实例
我很抱歉撞到了这么旧的东西,但我想把这件事留给我自己和所有未来遇到同样问题的人。我使用的是Mongoid ORM for Rails,它在内部使用Moped与MongoDB进行交互。
这个gem现在为我节省了数小时的手动转换为Hash
或HashWithIndifferentAccess
的时间:https://github.com/mindscratch/mongoid-indifferent-access.
从本质上讲,它似乎有某种预返回挂钩,可以自动将来自MongoDB的所有文档转换为类型HashWithIndifferentAccess
。
不想在这上面找点。我只是想把这个留在这里,因为这是谷歌在这个问题上的最高结果,它让我免于发疯。