Ошибка: ответы формы должны перенаправлять в другое место
Мне нужно отобразить 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