根据各种消息来源,Rails 7 中表单验证失败的方法是使用状态 422 无法处理的实体进行响应。然而,在我的例子中,这导致 Turbo 发出另一个 GET 请求,这不太可能是预期的结果。
日志如下所示:
Started POST "/users/new" for 127.0.0.1 at 2022-06-16 17:27:48 +0200
...
TRANSACTION (0.3ms) ROLLBACK
...
Rendered html template (Duration: 0.0ms | Allocations: 4)
Completed 422 Unprocessable Entity in 133ms (Views: 1.2ms | ActiveRecord: 10.9ms | Allocations: 54437)
Started GET "/users/new" for 127.0.0.1 at 2022-06-16 17:27:48 +0200
...
因此,从 Rails 的角度来看,一切似乎都很正常,因为服务器会响应所需的 422 状态代码。在浏览器中检查响应时,我看到带有错误消息的表单。然而,出于某种原因,Turbo 然后发出重定向到 /users/new
而不是让浏览器显示包含错误的表单。
更新:表单是使用 simple_form_for
生成的。
我如何找出 Turbo 重新加载页面的原因?
最好的, 卡尔山
最佳答案
当服务器以部分表单发布响应时,就会发生这种情况。返回一个完整的站点,包括 <html>
等解决问题。
关于forms - Rails 7 + Turbo : Turbo navigates away when receiving 422 unprocessable entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72648355/