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

Rails表单提交日期未传入控制器参数,始终使用默认值

问题排查与解决方案

核心原因

Rails的form_for会自动将表单参数嵌套在模型名对应的命名空间下,也就是params[:meal_plan],而非直接放在顶级params中。你直接取params[:start_date]自然拿不到用户提交的值,只会触发默认值逻辑。

修正控制器代码

调整参数获取方式,从params[:meal_plan]中提取日期值,同时处理参数为空的情况:

def new
  meal_plan_params = params[:meal_plan] || {}
  puts meal_plan_params[:start_date]
  puts meal_plan_params[:end_date]
  
  @meal_plan = current_user.meal_plans.build(
    start_date: meal_plan_params[:start_date].presence || Date.today,
    end_date: meal_plan_params[:end_date].presence || 6.days.from_now.to_date,
  )
  @meal_plan.build_meals
end

也可以用更安全的dig方法避免nil报错:

def new
  puts params.dig(:meal_plan, :start_date)
  puts params.dig(:meal_plan, :end_date)
  
  @meal_plan = current_user.meal_plans.build(
    start_date: params.dig(:meal_plan, :start_date).presence || Date.today,
    end_date: params.dig(:meal_plan, :end_date).presence || 6.days.from_now.to_date,
  )
  @meal_plan.build_meals
end

额外注意点

  1. 表单中的form_group拼写错误,正确写法是form-group(连字符),虽然不影响参数传递,但会导致Bootstrap样式失效,建议修正。
  2. 常规流程中new动作仅用于显示表单,提交表单应指向create动作(POST请求)。如果你的需求是在new中处理生成逻辑,当前GET请求方式可行,但需注意GET请求的参数长度限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:20:28