首页 > 解决方案 > 提交表单时,不会保存对 Rails 输入标记的 javascript 更改

问题描述

我正在将 rails 5 应用程序更新到 rails 6。在更新过程中,我意识到我的 rails 5 应用程序中有一个表单错误,该错误在 rails 6 版本上继续存在。问题如下,视图有一个带有多个输入文本标签的表单(一个用于我的模型特征中定义的每个属性)。一个输入标签是一个下拉菜单,用于控制启用哪些输入标签,哪些不启用。这是由 on change 监听器管理的。此侦听器包含清除禁用字段的代码。逻辑如下:

使用 jquery val("") 函数或普通加入 .value = "" (我已通过两种方式进行了测试)清除了该字段,将 value 属性设置为 ""。问题是,在视图中一切正常,字段被清除和禁用,但是当我检查为数据库中的模型保存的数据是旧的而不是“”。因此,当用户想要编辑功能时,字段混合如下:

但期望的行为是:

我不明白为什么输入文本标签上的 JavaScript 修改没有传递给 rails 控制器,而旧值是相同的,而是“”。

标签: javascriptjqueryruby-on-railswebpack

解决方案


如果您禁用 html 中的字段,那么在提交表单时,无论其值如何,它们都不会发送到服务器。一旦 rails 收到请求,缺少的参数就会被解释为“没有变化”。

您应该将字段更改为只读而不是禁用,以便它们在用户看来仍然是禁用的,但会发送到服务器以更新为空。

一个更安全的选择是让逻辑在后端强制执行此操作。如果收到其中一个字段,请将另一个字段更新为空,或者根据您选择的值检查哪个字段应该为空。

但是,前端解决方案对于原型应该足够好。


推荐阅读