Rails:渲染Json状态问题

52

当我

  render json: {
    error: "No such user; check the submitted email address",
    status: 400
  }

然后进行我的测试并检查

response.code

我得到的是200而不是400

我确信答案非常简单,但我已经找了一个小时,似乎无法让它工作。我可以解析Json,然后检查状态代码...但难道没有一种方法可以使response.code返回状态吗?我知道从技术上讲它是成功的,我假设这就是为什么response.code返回200的原因,但之前我在使用Jbuilder时,我可以直接影响返回的代码。

1个回答

109

您已经创建了json,它将被返回,并且在该json中将标识状态为400。但是,这并没有告诉Rails在头部发送400状态。

您可以这样做:

render json: {
  error: "No such user; check the submitted email address",
  status: 400
}, status: 400

或者类似于这样的东西

payload = {
  error: "No such user; check the submitted email address",
  status: 400
}
render :json => payload, :status => :bad_request

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


2
太好了。我并不认为JSON中的状态键/值是您要寻找的,但我还是在示例中包含了它,以防万一。 - Richard Jordan
1
有没有理由让JSON具有状态标识而不是仅在标题中包含它?再次感谢您的帮助! - Morgan
3
我见过各种类型的JSON响应负载,包括错误信息、状态信息等等。也许客户端因为某些原因更容易处理JSON响应而不是头部信息。很多公共API都这样做。建立API的好资源是Brian Mulloy的“RESTful API design”幻灯片,其中有很好的响应负载的设计理念(我经常参考):http://www.slideshare.net/apigee/restful-api-design-second-edition - Richard Jordan
2
请注意,API设计幻灯片有更新版本:http://www.slideshare.net/apigee/api-design-3rd-edition - Dennis
3
这是一个方便的链接。http://billpatrianakos.me/blog/2013/10/13/list-of-rails-status-code-symbols/ - Volte
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接