Rails:渲染Json状态问题

Mor*_*gan 37 json ruby-on-rails jbuilder

当我

  render json: {
    error: "No such user; check the submitted email address",
    status: 400
  }
Run Code Online (Sandbox Code Playgroud)

然后做我的测试并检查

response.code
Run Code Online (Sandbox Code Playgroud)

我得到200而不是400

我肯定这个荒谬简单的答案,但我一直在寻找一个小时,似乎无法让这个工作.我可以解析Json,然后检查状态代码......但是有没有办法让response.code返回状态?我理解技术上它是成功的,我认为这就是为什么response.code返回200,但我之前使用的是Jbuilder,直接影响返回的代码.

Ric*_*dan 79

你已经在那里创建了json,它将被返回,并且json将是状态的标识--400.但是,这并没有告诉Rails在标题中发送400状态.

你可以这样做:

render json: {
  error: "No such user; check the submitted email address",
  status: 400
}, status: 400
Run Code Online (Sandbox Code Playgroud)

或类似的东西

payload = {
  error: "No such user; check the submitted email address",
  status: 400
}
render :json => payload, :status => :bad_request
Run Code Online (Sandbox Code Playgroud)

您可以使用符号:bad_request或状态号400.

  • 所以我已经看到了各种json响应有效载荷,包括错误信息,状态信息等.由于某种原因,客户端可能会发现处理json响应比头信息更容易.很多公共API都是这样做的.构建API的一个很好的资源,对响应有效负载的好主意(我经常提到)是Brian Mulloy的"RESTful API设计"幻灯片:http://www.slideshare.net/apigee/restful-api-design-second -版 (3认同)
  • 大。我认为json中的状态键/值不是您想要的,但为了以防万一,我将其包含在示例中。 (2认同)
  • 仅供参考,有一个较新版的API设计幻灯片:http://www.slideshare.net/apigee/api-design-3rd-edition (2认同)
  • 这是一个方便的链接.http://billpatrianakos.me/blog/2013/10/13/list-of-rails-status-code-symbols/ (2认同)