Ошибка: ответы формы должны перенаправлять в другое место

Мне нужно отобразить html-код, который я получаю от API.

В 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

** Рельсы 7 **

Я звоню в веб-сервис. Я получаю ответ, но моя страница неактивна, и я получаю эту ошибку.

Ошибка: Форма ответы должны перенаправить в другое место на FormSubmission.requestSucceededWithResponse (Application-0f0c10fb8f5683e32fc53a93a8a323c328de61682ca16fb65a6a2b8a3ba5d087.js: 1614) при FetchRequest.receive (прикладной 0f0c10fb8f5683e32fc53a93a8a323c328de61682ca16fb65a6a2b8a3ba5d087.js:1390) в FetchRequest.perform (приложение-0f0c10fb8f5683e32fc53a93a8a323c328de61682ca16fb65a6a2b8a3ba5d087.js:1374)

Пока что пробовал:

      # GatewayController
respond_to :create, format: :html, gateway_response: @gateway_response.message.html_safe
      <%= gateway_response %>

Безуспешно ... Есть идеи? В противном случае это будут длинные выходные ^^

4 ответа

Параметр data: {turbo: false}приведет к полной перезагрузке страницы. Это убирает весь смысл турбо, который заключается в уменьшении перезагрузки страницы.

Причина возникновения ошибки заключается в том, что Turbo ожидает 303 redirect response. Решение состоит в том, чтобы сервер ответил 422или же 500код состояния, когда вы не redirecting.

      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

Я понял это, когда задавал свой вопрос. Сообщение об ошибке похоже на ошибку 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 }исправил мою проблему.

Вместо использования turbo: false, как предлагается в ответе, вам нужно добавить соответствующий статус, например: see_other для перенаправлений и 422 (unprocessible_entity) в случае рендеринга.

      render :new, status: 422

redirect_to xyz_path, status: :see_other
Другие вопросы по тегам