11

我正在尝试形成一个如下所示的 json 响应:

{
  "user": {
    "birthday": "2013-03-13",
    "email": "example@example",
    "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 属性。有没有办法做到这一点,但也允许与用户一起发送额外的数据?现在我只是将要发送到哈希的属性一个一个添加,但这显然并不理想。

4

2 回答 2

30

渲染 json 数据首先会自动调用模型上的“as_json”,它会返回一个 ruby​​ 哈希。之后,会调用 'to_json' 以获取哈希的字符串表示形式。

为了实现你想要的,你可以这样调用:

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

在这种情况下,没有响应 'as_json' 的对象,因此控制器只需调用 'to_json' 将您的哈希转换为字符串。

于 2013-03-13T22:26:43.577 回答
0

我建议使用这个 gem:https ://github.com/fabrik42/acts_as_api

于 2013-03-13T22:21:44.787 回答