即使我放了其他状态代码,Rails4 jbuilder总是返回状态代码200

我构建了一个json视图,在rails4 app中的ajax调用之一中返回json。 我使用了这里建议的想法https://stackoverflow.com/a/12832116/1560470

但即使我强制执行其他状态代码,我也始终将状态代码保持为200。

我在view / managers / create.json.jbuilder中的jbuilder视图如下所示:

if @manager.errors.messages.any? envelope(json, :unprocessable_entity, @manager.errors.messages) do json.success false end else envelope(json, :created) do json.success true end end 

我的应用程序助手lloks如下:

 module ApplicationHelper def envelope json, status, errors json.status status json.data do yield if block_given? end json.errors errors end end 

我的控制器如下:

 def create @manager = Manager.new manager_params @saved = ( @manager.valid? && @manager.save ) end 

您甚至可以看到我将status参数值传递为:unprocessable_entity在我的jbuilder视图中的unprocessable_entity,仍然每次响应返回200。 即使我使用任何状态代码 ,它总是返回200.状态代码在http://guides.rubyonrails.org/layouts_and_rendering.html中定义

我遇到了同样的问题,我发现成功后调用渲染,然后是你要发出的任何状态。 在create的底部放下面的内容

 render status: 400 

参考: https : //stackoverflow.com/a/28144206/3826642

您可以将逻辑从该包络方法移动到jbuilder模板,以便将状态直接从控制器传递到视图。

您在信封方法中的状态将仅在呈现的json中,它不是服务器发送的http响应状态代码,而在render方法中的状态代码是