Rails模型哈希,排除属性

时间:2013-03-13 22:14:33

标签: ruby-on-rails json

我正在尝试形成一个看起来像这样的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属性。有没有办法做到这一点,但也允许与用户一起发送其他数据?现在我只是逐个添加我想要发送到哈希的属性,但这显然不太理想。

2 个答案:

答案 0 :(得分:21)

首先渲染json数据,自动调用' as_json'在你的模型上,它返回一个ruby哈希。在那之后,' to_json'调用它来获取哈希的字符串表示。

为了达到你想要的效果,你可以这样打电话:

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

在这种情况下,没有对象响应' as_json',所以控制器只调用' to_json'把你的哈希变成一个字符串。

答案 1 :(得分:0)

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