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

修复Ruby代码中的NoMethodError:undefined method `[]' for nil:NilClass

解决NoMethodError: undefined method `[]' for nil:NilClass的问题

嘿,我来帮你搞定这个头疼的报错!你遇到的NoMethodError本质很简单——你代码里有个想用[]取值的对象是nil,咱们对着你的代码拆解来看:

你的报错行是:

results.each_pair do |k,v| @video_dates[v['videos'][0][:video_date]][k] = v end

这一行里可能触发报错的nil场景有三个:

  • 某个v里根本没有'videos'这个键,导致v['videos']返回nil,接着取[0]就报错
  • v['videos']是个空数组,v['videos'][0]返回nil,再取:video_date就报错
  • 就算你拿到了video_date,但@video_dates[video_date]还没被初始化(是nil),你直接给它的[k]赋值也会触发这个错误

修复方案

直接给你写好修改后的代码,每一步都加了安全防护:

results.each_pair do |k, v|
  # 用dig安全逐层取值,中间任何一步是nil就返回nil,不会报错
  video_date = v.dig('videos', 0, :video_date)
  
  # 如果取不到有效的video_date,直接跳过当前循环
  next unless video_date

  # 确保@video_dates里对应video_date的位置是个空哈希,避免nil
  @video_dates[video_date] ||= {}
  
  # 现在再赋值就安全了
  @video_dates[video_date][k] = v
end

额外排查建议

开发环境下你可以先打印一下results的结构,看看是不是有些数据不符合预期:

puts results.inspect

这样能直观看到哪些v的videos是空的或者缺失,方便你从数据源层面提前处理这类异常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:22:19