【发布时间】:2012-01-04 16:23:47
【问题描述】:
我在 Mongoid 中有很多可选字段,例如:
field :key, type: String
field :element, type: String
field :rect, type: Array
如果我返回这个模型的 json 并且只填充其中一个,我会在所有其他字段上得到 null 值。如何删除这些字段?
我的模型有嵌套属性,这意味着空值可以在多个级别上。
说明:
我需要一种方法从模型的 json 表示中删除空字段,包括所有嵌套属性中的空字段。
代码示例:
1.9.3-p0 :005 > u=Muse.new(:key=>'ram').to_json
=> "{\"_id\":\"4f1ced749c2ee4219d000003\",\"element\":null,\"key\":\"ram\",\"rect\":null}"
【问题讨论】:
-
一些示例数据/预期的输入/输出在这里会有所帮助
-
在模型上调用 to_json 时效果很好。 json 对象没有任何空字段?您使用的是哪个版本的 mongoid?调用 your_doc_obj.to_json 时返回 null 吗?
-
它确实有空字段。示例中仅填充了一个字段,其他字段为空,我想将它们删除。我还想删除其他字段(但我将使用 :attr_protected 删除)
-
@myxospsm,您必须使用
Muse.new(:key=>'ram').as_json.reject! {|k,v| v.nil?}而不是Muse.new(:key=>'ram').to_json才能获得正确的结果。这就是我在回答中所说的。请运行Muse.new(:key=>'ram').as_json.reject! {|k,v| v.nil?},让我知道你得到了什么...... -
是的,显然它可以工作(虽然我必须为嵌套属性编写一个函数)但它还是有点蹩脚,我希望有一种更清洁的方式。
标签: ruby-on-rails ruby mongodb mongoid