Rails Turbolinks无法呈现提交表单后的响应

4
在激活了Turbolinks的Rails项目(5.1)中提交基本的xhr表单,会触发正确的服务器端响应,但客户端(Turbolinks)会丢弃响应。无论是GET还是POST都不起作用。在Firefox和Chromium中进行了测试。带重定向的表单正常工作。 以下是一个对我失败的简单测试页面: test.html.erb:
<h1><%= @value %></h1>

<%= form_with url: 'test' do |f| %>
  <%= f.check_box :anything %>
  <%= f.submit %>
<% end %>

控制器:

      def test
    if request.post?
      @value = 'post'
    else
      @value = 'get'
    end
  end

路由:

 post '/test', to: 'controller#test'
  get '/test', to: 'controller#test'

Rails响应负载:

            <h1>post</h1>

<form action="test" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="X1sh+tc/Jx4P0rdDqc2CD1RetKQKr+lVh4fD29JOMY/b+PdPNgw1qyzoyv6t3I2I+6jV1mmn6voXN+YySaUISw==" />
  <input name="anything" type="hidden" value="0" /><input type="checkbox" value="1" name="anything" />
  <input type="submit" name="commit" value="submit" data-disable-with="submit" />
</form>
        </div>

表单加载如预期一样,但是在提交后页面没有改变。在xhr响应内正确的答案可见,但是没有应用到DOM中。
这是一个bug吗,还是我使用turbolinks有问题?

在xhr请求的情况下,渲染的文件是“*.js.erb”。因此,请将您的响应移动到一个新文件“test.js.erb”中。 - Jagdeep Singh
你需要使用JavaScript修改那个文件中的DOM。 - Jagdeep Singh
有没有其他的方法?我最喜欢Turbolinks的地方是我不必写(太多)JS,它仍然保持单页应用程序(对于WebSockets很有用)。 - The Omitter
2个回答

1

我也看到了这个问题,但我不确定该怎么处理。Turbolinks的好处在于您不必为每个请求创建js响应。除非您提交一个表单,否则这是真实的。此时,您别无选择,只能创建一个js.erb响应文件或将表单更改为local:true。我有什么遗漏吗?


0

尝试在任何链接到包含表单的页面中使用data: { turbolinks: false }

例如:

<%= link_to "联系我们", 'contact', data: { turbolinks: false } %>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接