1

我正在尝试使用裸骨导轨控制器并同时进行更细粒度的控制。如果我正在进行 :new 操作,我会用我的新 @instance 响应,我会得到一个状态代码 200 并呈现 :new 模板。在展会上,同样的东西,不同的模板。到目前为止,一切都很好。但是,在创作过程中,我遇到了一些意想不到的事情。如果新记录成功并且我调用了respond_with,我将被重定向到显示(状态代码302),这是正确的。但是,如果由于记录无效而无法创建新记录,则默认的 respond_with 会通过发出状态代码 200 并呈现新模板来响应。模板是对的,状态码是不对的。在这种情况下,响应代码不应该是 422(不可处理的实体)吗?

4

1 回答 1

1

Rails 返回 200 响应,因为它成功呈现了“新”模板。对于非 AJAX 请求,这通常可以正常工作,因为在这种情况下您还将向用户显示验证错误,以便他们知道发生了什么。

您需要 422 响应的唯一原因是,如果信息是通过 AJAX 提交的,并且您的客户端 JavaScript 取决于响应代码来知道该怎么做。就像 Jim 所说,如果需要,您始终可以使用 :status 选项强制呈现响应代码。在默认的“简单”情况下,虽然没有涉及 AJAX,但您可能不需要它。

更新:jQuery 客户端可能会依赖响应代码,方法是在.ajax函数中包含“错误”回调,或者通过.ajaxError

于 2013-04-01T19:30:42.853 回答