2013-03-13 89 views
5

我试图形成一个JSON响应,看起来像这样:Rails的模型散列,排除属性

{ 
    "user": { 
    "birthday": "2013-03-13", 
    "email": "[email protected]", 
    "id": 1, 
    "name": null, 
    "username": "example" 
    }, 
    "other_data": "foo" 
} 

之前,当我刚回国的用户,我用

render :json => @user, :except => [:hashed_password, :created_at, :updated_at] 

到保持发送hashed_pa​​ssword,created_at和updated_at属性。有没有办法做到这一点,但也允许额外的数据与用户一起发送?现在,我只是将我想要发送给哈希的属性逐个添加,但显然这并不理想。

回答

15

渲染JSON数据首先自动地称之为“as_json”你的模型,它返回一个红宝石哈希值。之后,'to_json'被调用以获得你的散列的字符串表示。

达到你想要的东西,你可以调用这样的事情:

render :json => { 
    :user => @user.as_json(:except => [:hashed_password]), 
    :some_other_data => {} 
} 

在这种情况下,有没有对象这是为了响应“as_json”,所以控制器只是调用“to_json”把你的哈希到一个字符串。

+0

正是我在找什么,谢谢一吨 – 2013-03-13 22:37:57