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

Ruby on Rails中NilClass调用each报错排查求助(Ruby2.2.9/Rails4.2.3)

解决Ruby on Rails中的NoMethodError(undefined method `each' for nil:NilClass)

这个错误的核心问题很明确:你的视图里调用@courses.each时,@courses是nil——也就是说Coursera.for(@search_term)没有返回预期的数组数据。咱们一步步排查修复:

1. 先修复模型里的明显语法错误

你的Coursera模型里这一行是完全错误的:

format :[enter image description here][1]json

这应该是你复制时的残留内容,HTTParty的format配置只需要指定格式类型,改成:

format :json

这个错误会导致HTTParty无法正确解析API返回的JSON响应,直接导致后续取["elements"]时得到nil。

2. 给API请求加容错处理

即使修复了格式问题,也可能因为API返回结构变化、网络故障或者参数错误,导致response["elements"]返回nil。咱们修改for方法,确保它始终返回一个数组(空数组也不会触发each的错误):

def self.for(term)
  response = get("", query: { query: term })
  # 如果elements不存在,返回空数组兜底
  response["elements"] || []
end

3. 调试确认API返回内容

可以在控制器里加一行调试代码,看看API实际返回了什么,方便进一步排查:

class CoursesController < ApplicationController
  def index
    @search_term = 'jhu'
    @courses = Coursera.for(@search_term)
    # 把结果打印到Rails日志里,查看log/development.log即可
    logger.debug "Coursera API返回的courses数据: #{@courses.inspect}"
  end
end

启动服务器访问页面后,打开日志文件就能看到@courses的真实值,判断是API没返回数据,还是返回结构和你预期的不一样。

4. 注意API版本问题

你使用的是旧版Coursera Catalog API(https://api.coursera.org/api/catalog.v1/courses),这个API大概率已经被官方废弃或更新了。如果前面的修复都做完还是拿不到数据,建议去Coursera开发者平台确认当前可用的API端点和请求参数规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:13:09