You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 7中Simple_form提交返回后按钮失效问题求助

解决Rails 7返回页面后按钮失效的问题

这个问题的核心是Rails 7默认启用的Turbo Drive在页面导航时会缓存页面,当你从Show页返回列表页时,Turbo直接从缓存恢复页面,导致原本绑定在表单、按钮上的JavaScript事件(比如Simple Form的交互逻辑、Turbo的表单提交处理)没有重新初始化,所以按钮失效。

下面是几个直接有效的解决办法:

方法1:禁用列表页的Turbo缓存

在你的列表页视图的<head>部分添加以下meta标签,强制Turbo返回时重新加载页面,而不是使用缓存:

<meta name="turbo-cache-control" content="no-cache">

这个方法最简单,适合新手,不需要写额外的JavaScript。

方法2:利用Turbo事件重新初始化交互

如果不想禁用缓存,可以通过Turbo提供的事件钩子,在页面渲染完成后重新初始化表单的JavaScript逻辑。在你的应用JavaScript文件(比如app/javascript/application.js)中添加:

document.addEventListener('turbo:render', function() {
  // 重新初始化Simple Form的表单控件
  document.querySelectorAll('form.simple_form').forEach(form => {
    // 触发Simple Form的初始化逻辑
    if (typeof SimpleForm !== 'undefined') {
      SimpleForm.initForm(form);
    }
    // 确保Turbo的表单提交处理正常工作
    Turbo.connectStreamSource(form);
  });
});

这个方法保留Turbo的缓存优势,同时修复事件绑定问题。

方法3:检查表单的Turbo属性

确保你的表单没有被意外设置为data-turbo="false",如果有,去掉这个属性,或者显式设置为true:

<%= simple_form_for investment, url: investment_path(investment), method: :patch, data: { turbo: true } do |f| %>

另外,之前添加的data: { disable_with: false }可以保留,它只是防止按钮提交后被禁用,和当前的失效问题无关。


内容的提问来源于stack exchange,提问作者Rodrigo Botafogo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 03:23:18