我正在尝试使用裸骨导轨控制器,同时具有更细粒度的控制。如果我在:新动作,我用我的新@instance回复,我得到一个状态代码200并呈现:新模板。在展示,同样的事情,不同的模板。到现在为止还挺好。但是,在创作中,我有一些意想不到的东西。如果新记录成功并且我在上面调用了respond_with,我被重定向到显示(状态代码302),这是正确的。但是如果由于记录无效而无法创建新记录,则默认的respond_with通过发出状态代码200并呈现新模板来响应。模板是正确的,状态代码不是。响应代码不应该是这种情况422(不可处理的实体)吗?
答案 0 :(得分:1)
Rails返回200响应,因为它成功呈现了“新”模板。对于非AJAX请求,这通常可以正常工作,因为在这种情况下您还会向用户显示验证错误,以便他们知道发生了什么。
您应该需要422响应的唯一原因是,如果信息是通过AJAX提交的,并且您的客户端javascript依赖于响应代码来知道该怎么做。就像Jim说的那样,如果需要,可以随时使用:status选项强制执行响应代码。在默认的“简单”情况下,虽然没有涉及AJAX,但您可能不需要它。
更新:jQuery客户端可能依赖于响应代码,方法是在.ajax函数中包含“错误”回调,或者通过.ajaxError。