Ruby on Rails注册表单报param缺失或为空: signUp如何解决?
Ruby on Rails注册登录报错
param is missing or the value is empty: signUp 排查方案 核心报错原因:表单参数结构不符合强参数要求
你在控制器中定义的signUp_params方法,要求所有提交的表单参数必须嵌套在signUp这个键下,但是当前注册表单的input标签name属性是直接写的email/username/password,参数提交后不会自动包裹在signUp下,就会触发参数缺失的报错。
修改方式:调整三个输入框的name属性为嵌套格式:
<input type="email" placeholder="Enter Email" name="signUp[email]" required> <input type="name" placeholder="Enter Username" name="signUp[username]" required> <input type="password" placeholder="Enter Password" name="signUp[password]" required>
控制器create方法的其他语法错误
你当前的控制器代码还有两处语法问题,参数问题修复后会触发这两个报错,需要同步修改:
- 模型初始化写法错误:Ruby中类名必须大写开头,
signUp.new(signUp_params)写法错误,正确写法为SignUp.new(signUp_params)(前提是你的用户模型类名为SignUp,对应表名为sign_ups) - 报错分支变量名错误:
flash[:register_errors] = user.errors.full_messages中你并没有定义user变量,你声明的存储用户数据的变量为signUp,需要修改为signUp.errors.full_messages
符合Rails规范的优化建议
Rails默认遵循蛇形命名规范,不建议使用驼峰命名,你可以把强参数里的:signUp改为:sign_up,对应表单的name属性同步改为sign_up[xxx]的格式,符合框架约定可以减少后续不必要的兼容性问题。
如果你的注册功能是面向通用用户体系,更建议把模型名改为User,语义更清晰,也更符合行业通用开发习惯。
内容的提问来源于stack exchange,提问作者Kim Gordon
相关产品推荐
相关产品推荐

