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
相关产品推荐
相关产品推荐

