Rails框架ERB表单校验错误信息无法在前端页面显示问题求助
问题原因及解决方法
1. 表单默认异步提交导致页面不刷新
Rails 5+ 版本中form_with默认开启AJAX异步提交(默认参数local: false),你提交表单后控制器返回的错误页面HTML不会自动替换当前页面内容,所以终端能看到错误渲染日志,但前端页面没有变化。
解决方法:修改_form.html.erb中的表单声明,添加local: true参数启用同步提交:
<%= form_with(model: trip, local: true) do |f| %>
2. 日期输入控件未绑定表单对象
你当前的日期输入写法没有绑定表单构建器f,导致选中的日期无法被正确组装到trip的请求参数中,就算你填了日期也会触发必填验证:
<!-- 错误写法 --> <%= date_select :date, start_year: Date.current.year %>
修改为绑定表单对象的写法即可:
<!-- 正确写法 --> <%= f.date_select :date, start_year: Date.current.year %>
可选优化
你控制器new和create方法中组装下拉选项的逻辑重复,可以简化为更简洁的写法,不需要手动循环:
# 提取到私有方法中在new和create执行前调用 before_action :load_select_options, only: [:new, :create] private def load_select_options @places_arr = Place.pluck(:name, :id) @vehicles_arr = Vehicle.pluck(Arel.sql("CONCAT(marca, ' ', modello)"), :id) end
内容的提问来源于stack exchange,提问作者Ale Crout
相关产品推荐
相关产品推荐

