【问题标题】:GET request processed as HTML rather than TURBO_STREAM from within turbo_frame_tagGET 请求在 turbo_frame_tag 中处理为 HTML 而不是 TURBO_STREAM
【发布时间】:2022-01-18 01:46:50
【问题描述】:

我开始使用 hotwire/turbo 并设置好一切。 Turbo 流工作正常。

在 index.html.erb 内:

<h1>Tasks</h1>
<%= turbo_stream_from "tasks" %>

<div id="tasks">
  <% @tasks.each do |task| %>
    <%= render task %>
  <% end %>
</div>

在_task.html.erb内

<%= turbo_frame_tag dom_id(task) do %>
  <%= link_to 'Edit', edit_task_path(task) %>
  <%= link_to 'Destroy', task, method: :delete, data: { confirm: 'Are you sure?' } %>
  <hr>
<% end %>

当按预期按下销毁按钮时,rails 控制台会显示:

Started DELETE "/tasks/41" for ::1 at 2021-12-14 18:40:32 +0000
Processing by TasksController#destroy as TURBO_STREAM

但是当按下编辑按钮时,rails 控制台会说:

Started GET "/tasks/41/edit" for ::1 at 2021-12-14 18:41:29 +0000
Processing by TasksController#edit as HTML

这意味着页面会加载一个新页面,呈现 edit.html.erb 而不仅仅是更新 turbo_frame_tag 中的内容。

检查 DOM 时,edit 和 destroy 链接都在一个 turbo-frame 内:

<turbo-frame id="task_41">
  <a href="/tasks/41/edit">Edit</a>
  <a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/tasks/41">Destroy</a>
  <hr>
</turbo-frame> 

所以我的问题是,为什么请求被处理为 HTML 而不是 TURBO_STREAM ?

edit.html.erb 看起来像这样:

<h1>Editing Task</h1>
<%= turbo_frame_tag dom_id(@task) do %>
    <%= render 'form', task: @task %>
<% end %>
<%= link_to 'Show', @task %> |
<%= link_to 'Back', tasks_path %>

非常感谢!

【问题讨论】:

    标签: ruby-on-rails hotwire-rails turbo


    【解决方案1】:

    已解决:

    在application.js中,我还有这行:

    require("turbolinks").start()
    

    我删除了这个,这解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2017-06-18
      相关资源
      最近更新 更多