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

