Rails Turbo Stream仅更新页面单个元素问题排查
问题原因及解决方案
问题出在视图代码的ERB输出语法上:
- 渲染
question的turbo frame时,你用了<% turbo_frame_tag "question" do %>,这种写法只会执行Ruby代码但不会将生成的<turbo-frame>标签输出到页面DOM中,导致页面里根本不存在id为question的目标元素,Turbo Stream的update指令找不到对应元素,自然没法完成更新。 response能正常更新,大概率是你实际代码里给它用了<%= %>语法(或者页面上存在其他id为response的元素),让Turbo Stream能找到目标。
修复方法很简单,修改视图中question部分的ERB语法,添加=符号,让turbo frame标签正确输出到页面:
<div class="mb-6"> <h2 class="text-2xl font-semibold"> <%= turbo_frame_tag "question" do %> <%= @question %> <% end %> </h2> <p class="text-gray-700"> <%= turbo_frame_tag "response" do %> <%= @response %> <% end %> </p> </div>
修改后页面会生成带有id="question"和id="response"的turbo frame元素,Turbo Stream的update指令就能正确找到目标并更新内容。
内容的提问来源于stack exchange,提问作者gaurav
相关产品推荐
相关产品推荐

