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

Rails 7.1.2:验证失败返回422状态后JavaScript停止工作

问题原因分析

你的问题出在Turbo对非成功响应(如422状态)的处理逻辑和Turbolinks不同,导致JavaScript初始化函数没有被正确触发:

  1. 若表单通过Turbo提交(即使你加了local: true,可能存在配置冲突导致Turbo仍介入),当返回422时,Turbo会替换页面内容但不会触发turbo:load事件,而是触发turbo:render事件;
  2. 若表单是普通HTTP提交(全页面刷新),仅监听turbo:load可能覆盖不全,需要同时监听原生的DOMContentLoaded事件;
  3. 页面重新渲染后,之前绑定的日历实例可能残留,导致新元素无法正确绑定。
解决方案

修改你的JavaScript代码,同时监听多个事件,并在初始化前销毁旧的日历实例:

// 监听所有可能的页面加载/渲染事件
document.addEventListener("DOMContentLoaded", initializeBulmaCalendarPicker);
document.addEventListener("turbo:load", initializeBulmaCalendarPicker);
document.addEventListener("turbo:render", initializeBulmaCalendarPicker);

window.initializeBulmaCalendarPicker = function() {
  // 先销毁已存在的日历实例,避免重复绑定
  bulmaCalendar.destroy('[type="date"]');
  
  // 重新绑定日历选择器
  var datePickers = bulmaCalendar.attach('[type="date"]', {
    overlay: true,
    lang: 'fr'
    // 保留你的其他配置项
  });
}
额外检查项
  1. 确认表单的local: true和data: {turbo: false}是否生效:可以在浏览器开发者工具中查看表单元素,确认是否带有data-turbo="false"属性;
  2. 若使用Rails的Importmaps或Webpack,确保bulmaCalendar库在全局作用域可访问,或在初始化函数中正确导入;
  3. 控制器返回render :new, status: :unprocessable_entity的逻辑是正确的,无需修改。

内容的提问来源于stack exchange,提问作者Bhupendra Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:37:52