1

我正在使用带有 hotwire-rails 的 rails 6.1.x

我想知道您是否曾经经历过以下情况:

我有一个页面,我有这样的 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' %>

现在,如果我单击链接,则会收到错误消息:

Firefox 控制台中的“错误:表单响应必须重定向到另一个位置”

什么也没有发生。

如果我删除“方法::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 %>

你知道为什么会这样吗?真是令人费解。

4

1 回答 1

1

只是为了充实评论中的信息,特别是因为 Hotwire/Turbo 中的链接似乎存在很多混淆:

  1. 如果您希望链接具有“默认”行为(这意味着您需要一个新页面/一个完整页面重新加载),OPdata: { turbo: false }在链接上声明是正确的。

  2. 评论者 max 是正确的,method: :get不需要添加即可使链接以这种方式运行。然而,重要的是要注意,失败的原因是添加method参数实际上会使链接发送一个 POST 请求,其中隐藏的输入名称为“_method”,值为“get”。请参阅Rails API 文档link_to

  3. OP 看到的错误消息实际上是 Turbo 错误。目前还不清楚这是否是一个错误,因为应该停用 Turbo。应该是网络请求成功了,但是没有重定向,因为Turbo已经接管了。最终发生故障的原因是因为 Turbo 正在(错误地?)处理请求,并期望 30x 重定向,但没有发生重定向。这就是失败最终发生的原因。如果您在 DevTools 中打开网络检查器,您将看到一个 200 请求,其中包含您链接到的页面的预览。

TLDR:添加method: :get使链接发送 POST 请求,这可能就是 Turbo 接管的原因,即使 OP 放入了data: { turbo: false }.

于 2021-11-06T18:46:05.903 回答