2013-06-20 43 views
4

我有一个具有许多动态属性的记录模型。我想向模型发出一个请求,将响应作为JSON发送给客户端。但我想在这个模型中排除像_id和所有foreign_keys字段。从mongoid文档中排除字段?

我发现一个interssting答案如何排除某些键的值:How do I exclude fields from an embedded document in Mongoid?,但响应中的键仍然存在。

我:

{ 
"_id": 1, 
"name": "tom" 
} 

而且without方法使:

{ 
    "_id": nil, 
"name": "tom" 
} 

但我想:

{ 
"name": "tom" 
} 

是否可以消除或排除某些键和值从结果?

回答

6

你不想从mongoid文档中删除字段,你想要做的就是从生成的json中删除字段。 在您的控制器,为to_json方法http://apidock.com/rails/ActiveRecord/Serialization/to_json

+0

对于生成的JSON这是正确的答案。如果mongoid实现了@Dominik提到的mongodb功能,那将会很好。 – Mindbreaker

+0

@Mindbreaker这个功能实际上是存在的,你在使用“without”时使用它,但是当它映射到你的ruby对象时,你的域仍然存在,并且默认返回nil。 – RedXVII

+0

'没有'没有做到MongoDB究竟做什么。我期望一个没有这个属性的ruby对象。 – Mindbreaker

1

从MongoDB的资料为准做

render :json => @model.to_json(:except => :_id) 

文档:http://docs.mongodb.org/manual/reference/method/db.collection.find/

排除某些字段从结果集 以下示例选择相匹配的文件选择标准并从所得文件中排除一组字段:

db.products.find({ qty: { $gt: 25 } }, { _id: 0, qty: 0 }) 查询返回所有从集合产品,其中数量大于25的结果集将包含除_id和数量领域的所有领域的文件的文件,如下所示:

{ "item" : "pencil", "type" : "no.2" } 
{ "item" : "bottle", "type" : "blue" } 
{ "item" : "paper" } 

我猜想mongoid将_id属性设置为nil,因为mongoid模型具有一组定义的属性(即使它们是动态的,_id,_type等被定义)。也许你可以用mongodb驱动程序尝试它。

但我认为RedXVII的答案是更实际的方式去