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)

Happy upgrade anyone

谢谢!我也在 Rails 7 上开发,data: { turbo: false } 解决了我的问题。

设置data: {turbo: false} 将导致页面完全重新加载。这消除了 turbo 的全部意义,即减少页面重新加载。

错误发生的原因是因为 Turbo 需要 303 redirect response。解决方案是当您不是 redirecting.

时让服务器响应 422500 状态代码
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