表单回复必须使用 link_to 重定向到另一个位置
Form responses must redirect to another location with link_to
我正在使用 rails 6.1.x with hotwire-rails
想知道您是否有过以下经历:
我有一个页面 link_to 是这样的:
<%= link_to client_luser_courses_path,
{
method: :get,
class: "btn btn-primary text-center float-right",
data: {turbo: false}
} do %>
<i class="fa fa-arrow-right" aria-hidden="true"></i>Get the files:
<% end %>
在页面顶部,我启用了 turbo:
<%= javascript_pack_tag 'client', 'data-turbo-track': 'reload' %>
现在,如果我单击 link,我会收到错误消息:
Firefox 控制台中的“错误:表单响应必须重定向到另一个位置”
什么也没发生。
如果我删除“method::get”部分,那么它工作正常。
<%= link_to client_luser_courses_path,
{
class: "btn btn-primary text-center float-right",
data: {turbo: false}
} do %>
<i class="fa fa-arrow-right" aria-hidden="true"></i>Get the files:
<% end %>
你知道为什么会这样吗?真是百思不得其解。
只是为了充实评论中的信息,特别是因为 Hotwire/Turbo 中的 link 似乎有很多混淆:
如果您希望 link 具有“默认”行为(意味着您需要一个新页面/整个页面重新加载),OP 是正确的 data: { turbo: false }
在 link.
上声明
评论者 max 是正确的,添加 method: :get
并不是使 link 以这种方式运行的必要条件。然而,需要注意的是,失败的原因是添加一个 method
参数 实际上使 link 发送一个 POST 请求 ,带有名称为“_method”和值为“get”的隐藏输入。请参阅 the Rails API docs 中的 link_to
。
OP看到的错误信息实际上是一个Turbo错误。目前还不清楚这是否是一个错误,因为 Turbo 应该被停用。应该是网络请求成功了,但是没有重定向,因为Turbo已经接管了。失败最终发生的原因是因为 Turbo 正在(错误地?)处理请求,并期望 30x 重定向,但没有发生重定向。这就是失败最终发生的原因。如果您在 DevTools 中打开网络检查器,您会看到一个 200 请求,其中包含您正在 link 访问的页面的预览。
TLDR:添加 method: :get
会使 link 发送 POST 请求,这可能是 Turbo 接管的原因,即使 OP 放入 data: { turbo: false }
.
我正在使用 rails 6.1.x with hotwire-rails
想知道您是否有过以下经历:
我有一个页面 link_to 是这样的:
<%= link_to client_luser_courses_path,
{
method: :get,
class: "btn btn-primary text-center float-right",
data: {turbo: false}
} do %>
<i class="fa fa-arrow-right" aria-hidden="true"></i>Get the files:
<% end %>
在页面顶部,我启用了 turbo:
<%= javascript_pack_tag 'client', 'data-turbo-track': 'reload' %>
现在,如果我单击 link,我会收到错误消息:
Firefox 控制台中的“错误:表单响应必须重定向到另一个位置”
什么也没发生。
如果我删除“method::get”部分,那么它工作正常。
<%= link_to client_luser_courses_path,
{
class: "btn btn-primary text-center float-right",
data: {turbo: false}
} do %>
<i class="fa fa-arrow-right" aria-hidden="true"></i>Get the files:
<% end %>
你知道为什么会这样吗?真是百思不得其解。
只是为了充实评论中的信息,特别是因为 Hotwire/Turbo 中的 link 似乎有很多混淆:
如果您希望 link 具有“默认”行为(意味着您需要一个新页面/整个页面重新加载),OP 是正确的
上声明data: { turbo: false }
在 link.评论者 max 是正确的,添加
method: :get
并不是使 link 以这种方式运行的必要条件。然而,需要注意的是,失败的原因是添加一个method
参数 实际上使 link 发送一个 POST 请求 ,带有名称为“_method”和值为“get”的隐藏输入。请参阅 the Rails API docs 中的link_to
。OP看到的错误信息实际上是一个Turbo错误。目前还不清楚这是否是一个错误,因为 Turbo 应该被停用。应该是网络请求成功了,但是没有重定向,因为Turbo已经接管了。失败最终发生的原因是因为 Turbo 正在(错误地?)处理请求,并期望 30x 重定向,但没有发生重定向。这就是失败最终发生的原因。如果您在 DevTools 中打开网络检查器,您会看到一个 200 请求,其中包含您正在 link 访问的页面的预览。
TLDR:添加 method: :get
会使 link 发送 POST 请求,这可能是 Turbo 接管的原因,即使 OP 放入 data: { turbo: false }
.