Error: Form responses must redirect to another location
Error: Form responses must redirect to another location
我需要呈现从 API 收到的 html 代码。
在 Rails 6 中:我在我的控制器中执行此操作,并且工作正常。我调用了收到响应的网络服务,然后我被重定向到渲染器生成的代码。很好!
class GatewayController < ApplicationController
def new
init_gateway_call
end
def create
call_gateway
render_gateway_response
end
private
...
def render_gateway_response
render(html: @gateway_response.message.html_safe)
end
end
new.html.erb :
<%= form_with url: gateway_path, local: true do |f| %>
...
<% end %>
没有:create.html.erb
** Rails 7 **
我调用网络服务。我得到了答案,但我的页面空闲并且出现了这个错误。
Error: Form responses must redirect to another location at FormSubmission.requestSucceededWithResponse (application-0f0c10fb8f5683e32fc53a93a8a323c328de61682ca16fb65a6a2b8a3ba5d087.js:1614)
at FetchRequest.receive (application-0f0c10fb8f5683e32fc53a93a8a323c328de61682ca16fb65a6a2b8a3ba5d087.js:1390)
at FetchRequest.perform (application-0f0c10fb8f5683e32fc53a93a8a323c328de61682ca16fb65a6a2b8a3ba5d087.js:1374)
到目前为止,我尝试了:
# GatewayController
respond_to :create, format: :html, gateway_response: @gateway_response.message.html_safe
<%= gateway_response %>
没有成功...你有什么想法吗?不然就是长周末了^^
我在发布我的问题时想通了。错误消息似乎是 Turbo 错误。我的表格必须有 data-turbo false。
<%= form_with url: gateway_path, local: true, data: { turbo: false } do |f| %>
...
<% end %>
并让我的控制器保持原样。
render(html: @gateway_response.message.html_safe)
谢谢!我也在 Rails 7 上开发,data: { turbo: false }
解决了我的问题。
设置data: {turbo: false}
将导致页面完全重新加载。这消除了 turbo 的全部意义,即减少页面重新加载。
错误发生的原因是因为 Turbo 需要 303 redirect response
。解决方案是当您不是 redirecting
.
时让服务器响应 422
或 500
状态代码
if save
redirect_to root_path
else
render :new, status: 422
您可以在这里阅读:https://turbo.hotwired.dev/handbook/drive#redirecting-after-a-form-submission
当然,如果你想让页面重新加载,你可以使用data-turbo: false
我需要呈现从 API 收到的 html 代码。
在 Rails 6 中:我在我的控制器中执行此操作,并且工作正常。我调用了收到响应的网络服务,然后我被重定向到渲染器生成的代码。很好!
class GatewayController < ApplicationController
def new
init_gateway_call
end
def create
call_gateway
render_gateway_response
end
private
...
def render_gateway_response
render(html: @gateway_response.message.html_safe)
end
end
new.html.erb :
<%= form_with url: gateway_path, local: true do |f| %>
...
<% end %>
没有:create.html.erb
** Rails 7 **
我调用网络服务。我得到了答案,但我的页面空闲并且出现了这个错误。
Error: Form responses must redirect to another location at FormSubmission.requestSucceededWithResponse (application-0f0c10fb8f5683e32fc53a93a8a323c328de61682ca16fb65a6a2b8a3ba5d087.js:1614) at FetchRequest.receive (application-0f0c10fb8f5683e32fc53a93a8a323c328de61682ca16fb65a6a2b8a3ba5d087.js:1390) at FetchRequest.perform (application-0f0c10fb8f5683e32fc53a93a8a323c328de61682ca16fb65a6a2b8a3ba5d087.js:1374)
到目前为止,我尝试了:
# GatewayController
respond_to :create, format: :html, gateway_response: @gateway_response.message.html_safe
<%= gateway_response %>
没有成功...你有什么想法吗?不然就是长周末了^^
我在发布我的问题时想通了。错误消息似乎是 Turbo 错误。我的表格必须有 data-turbo false。
<%= form_with url: gateway_path, local: true, data: { turbo: false } do |f| %>
...
<% end %>
并让我的控制器保持原样。
render(html: @gateway_response.message.html_safe)
谢谢!我也在 Rails 7 上开发,data: { turbo: false }
解决了我的问题。
设置data: {turbo: false}
将导致页面完全重新加载。这消除了 turbo 的全部意义,即减少页面重新加载。
错误发生的原因是因为 Turbo 需要 303 redirect response
。解决方案是当您不是 redirecting
.
422
或 500
状态代码
if save
redirect_to root_path
else
render :new, status: 422
您可以在这里阅读:https://turbo.hotwired.dev/handbook/drive#redirecting-after-a-form-submission
当然,如果你想让页面重新加载,你可以使用data-turbo: false