Rails模型哈希,排除属性

dar*_*ght 9 json ruby-on-rails

我试图形成一个看起来像这样的json响应:

{
  "user": {
    "birthday": "2013-03-13",
    "email": "example@example",
    "id": 1,
    "name": null,
    "username": "example"
  },
   "other_data": "foo"
}
Run Code Online (Sandbox Code Playgroud)

之前,当我刚回到用户时,我用过

render :json => @user, :except => [:hashed_password, :created_at, :updated_at]
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*lex 23

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

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

render :json => {
  :user => @user.as_json(:except => [:hashed_password]),
  :some_other_data => {}
}
Run Code Online (Sandbox Code Playgroud)

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