Hanami参数校验出现undefined method `size' for nil:NilClass错误如何解决
错误成因
该错误是版本兼容和API误用共同导致的:
- 你当前使用的Hanami 1.3.x生态组件(hanami-controller 1.3.3、hanami-validations 1.3.7)依赖
dry-validation 0.11.x、dry-types 0.13.x版本的dry-rb组件,如果项目中其他gem引入了更高版本的dry-types、dry-validation等dry-rb组件,会出现依赖冲突,导致dry-validation的input_processor对象未被正确初始化,调用size方法时指向nil。 - 你在params校验块中额外使用了
.schema方法,Hanami 1.3的validations已经对dry-validation做了封装,嵌套校验不需要手动调用schema方法,这一多余调用触发了dry-validation 0.11的废弃API逻辑,直接导致报错。
解决方案
- 检查Gemfile.lock,确认
dry-validation版本为0.11.x、dry-types版本为0.13.x,如果版本超出范围,在Gemfile中显式锁定兼容版本:
执行gem 'dry-types', '~> 0.13.0' gem 'dry-validation', '~> 0.11.0'bundle update dry-types dry-validation重新安装对应版本。 - 修改params校验块的写法,删除多余的
.schema调用,使用Hanami 1.3官方推荐的嵌套写法:params do required(:user) do required(:first_name).filled(:str?) required(:last_name).filled(:str?) required(:email).filled(:str?, format?: /@/) required(:password).filled(:str?).confirmation end end - 检查父类
AuthBaseAction,确认没有自定义的dry-validation全局配置覆盖了默认的input_processor设置,如果有相关配置先删除后重试。
内容的提问来源于stack exchange,提问作者DanilNovikov
相关产品推荐
相关产品推荐

