ruby-on-rails Turbo Stream Rails不更新页面

waxmsbnn  于 2022-12-20  发布在  Ruby
关注(0)|答案(1)|浏览(90)

我是Ruby on Rails新手,需要帮助来弄清楚Turbo Stream在Rails中是如何工作的。我通过教程做了所有的事情,但是页面的内容没有更新。我决定测试Turbo Stream在简单div上的行为。
index.html.erb文件中,我用id="test"创建了这样的div:

<div id = "test">Hallow</div>

在同一个文件中,我创建了一个按钮,它调用控制器中的方法refresh

<%=button_to " ", refresh_path(:task => task, format: :turbo_stream)%>

该方法被调用并正常工作,我已经检查了它没有涡轮流。
refresh.turbo_stream.erb的含量:

<%= turbo_stream.replace 'test', partial: 'refresh' %>

_refresh.html.erb的含量

<h1>GoodBye</h1>

这是Turbo Stream工作原理x1c 0d1x的证明
Turbo Stream确实渲染了页面,但我得到了这样的输出。

我试着在控制器中写入响应,删除turbo_stream格式(它导致了另一个错误),玩路由,但没有得出任何结果。
我很抱歉,如果这个问题可能已经回答了,但我尝试了不同的选项,没有为我工作。请帮助!

cbeh67ev

cbeh67ev1#

  • Turbo* 不能处理除html以外的格式的链接(显然 php 也是如此)。

所以当你点击一个链接或按钮,其中有“.json”,“.xml”,或“.turbo_stream”或其他任何东西,Turbo 放弃,只是把你直接送到该页面,浏览器显示它可以最好的,它不知道该怎么做 turbo_stream,其中有Content-Type: text/vnd.turbo-stream.html,所以,在浏览器中的纯文本。
要修复此问题,请删除:format

<%= button_to "refresh", refresh_path(task: task) %>

使用此按钮,Turbo 将发送正确的请求,并在此等待html或turbo_stream响应,您可以在请求报头中看到:
Accept: text/vnd.turbo-stream.html, text/html, application/xhtml+xml
如果服务器随后以 turbo_stream 格式响应:Content-Type: text/vnd.turbo-stream.html,则流指令将在当前页上执行。还有其他规则,但一次一步。
要呈现适当的响应,请在控制器操作中使用respond_to方法:

respond_to do |format|
  format.html         { render :page } # renders `page.html.erb`
  format.turbo_stream { render :page } # renders `page.turbo_stream.erb`
  # or render <turbo-stream> inline
  # format.turbo_stream { render turbo_stream: turbo_stream.replace :test, partial: "test_partial" }
end

相关问题