Rails 7迁移后Date.civil无法读取带方括号的日期参数怎么办
Rails 7迁移后date_select参数获取问题的解决方法
问题根源
从提交日志能看到,参数键被额外包裹了方括号(例如"[date_of_birth(1i)]"),而原有代码通过params["date_of_birth(1i)"]取值,键名不匹配导致返回nil。
解决办法
临时适配:直接使用带方括号的参数键
直接用日志中显示的键名获取参数,构造日期对象:
year = params["[date_of_birth(1i)]"].to_i month = params["[date_of_birth(2i)]"].to_i day = params["[date_of_birth(3i)]"].to_i date = Date.civil(year, month, day)
彻底修复:修正表单参数生成(推荐)
参数带方括号通常是date_select生成的name属性异常导致的,按以下场景调整视图代码:
- 绑定模型的表单(form_with/form_for):确保表单正确关联模型,参数会自动嵌套,Rails还能自动将参数转换为日期对象:
<%= form_with model: @user do |f| %> <%= f.date_select :date_of_birth %> <%= f.submit "Invia" %> <% end %> 控制器中通过强参数直接获取日期: ```ruby def user_params params.require(:user).permit(:date_of_birth) end # 使用时直接取转换后的日期 date = user_params[:date_of_birth] - 无模型的表单(form_tag):显式指定
date_select的name选项,避免生成带方括号的键:<%= form_tag results_dob_path do %> <%= date_select :date_of_birth, {}, name: "date_of_birth" %> <%= submit_tag "Invia" %> <% end %> 调整后参数键会变回`date_of_birth(1i)`,原有代码即可正常执行。
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

