1

我构建了一个 json 视图以在 rails4 应用程序的 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

我的应用程序助手如下所示:

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

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

4

1 回答 1

2

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

render status: 400

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

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

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

于 2016-06-08T05:42:05.810 回答