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

Rails 6中form_with表单提交无法传递全部已授权参数问题

根本原因

你代码里的adults、children、total三个表单输入字段都添加了disabled: true属性,根据HTML规范,设置了disabled属性的表单元素不会被浏览器包含在提交的请求参数中,所以后端根本接收不到这三个参数,和参数白名单配置无关。

解决方案

推荐使用readonly属性替代disabled属性,readonly属性会禁止用户直接编辑输入框内容,但浏览器会正常提交该字段的值,符合你的业务需求。
修改表单中对应的三个字段代码即可:

# adults字段修改
<%= f.number_field :adults, class: "input-qty", value: "1", max: "100", min: "0", id: "adults", readonly: true %>

# children字段修改
<%= f.number_field :children, class: "input-qty", value: "0", max: "100", min: "0", id: "child", readonly: true %>

# total字段修改
<%= f.number_field :total, id: "total", value: @tour.price, readonly: true %>

如果需要保留disabled的视觉效果,可以额外给这三个字段添加CSS样式,比如设置透明度、光标样式等即可。
如果确实需要保留disabled属性,也可以为每个字段新增一个同名的hidden_field,每次JS修改disabled字段的值时,同步更新对应hidden字段的值,由hidden字段负责提交参数即可。

额外安全提示

不要完全信任前端提交的total总价参数,建议后端拿到adults、children参数后,结合对应tour的单价重新计算总价,避免用户篡改前端代码提交异常低价,产生资损风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:12:01