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

Hanami参数校验出现undefined method `size' for nil:NilClass错误如何解决

错误成因

该错误是版本兼容和API误用共同导致的:

  1. 你当前使用的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。
  2. 你在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:06:04