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

Rails开发报错:param is missing or the value is empty: campaign 求助

解决Rails中"param is missing or the value is empty: campaign"报错

问题根源

你的代码存在两个核心问题:

  • button_to传递的参数是顶级键campaign_type,但控制器的campaign_params要求参数必须嵌套在:campaign键下
  • campaign_params的permit方法里错误包含了:campaign字段(该字段不存在,需移除)

修复步骤

1. 修正button_to的参数传递方式

把campaign_type嵌套在:campaign键下,确保提交后params[:campaign]包含所需字段:

<%= button_to 'Start 14 days free trial', select_campaign_type_path(campaign: { campaign_type: 1 }), method: :patch, class: 'py-4 px-10 w-full text-white font-semibold rounded-xl focus:ring focus:ring-indigo-300 bg-indigo-600 hover:bg-indigo-700 transition ease-in-out duration-200' %>

2. 修正campaign_params方法

移除错误的:campaign许可字段,只保留实际需要的:campaign_type:

def campaign_params
  params.require(:campaign).permit(:campaign_type)
end

可选方案:不使用嵌套参数(不推荐,不符合Rails参数约定)

如果不想用嵌套参数,可修改campaign_params直接读取顶级参数,同时调整控制器的构建逻辑:

def campaign_params
  params.permit(:campaign_type)
end

# 控制器动作中调整构建方式
@campaign = current_user.campaigns.build(campaign_params)

但这种方式不符合Rails强参数的最佳实践,建议优先使用嵌套参数的方案。

额外说明

移除require(:campaign)后出现的其他报错,是因为原permit包含了不存在的:campaign字段,同时参数结构不符合预期,修正上述两点后即可解决所有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:15:22