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

请求解释localhost:3000出现undefined method `<<' for nil:NilClass错误原因

解决undefined method '<<' for nil:NilClass错误

这个问题其实很常见——你在尝试往@cabins_available里追加元素时,这个实例变量还没被初始化,Ruby中未赋值的实例变量默认是nil,而nil对象根本没有<<(追加元素)这个方法,所以才会抛出这个错误。

修复方案

只需要在使用@cabins_available之前,把它初始化为一个空数组即可:

class TravelagentController < ApplicationController
  def index
    @cruises = Cruise.all
    @cruise_names = []
    @cruises.each do |cruise|
      @cruise_names << cruise.name
    end

    # 关键步骤:先初始化空数组
    @cabins_available = []
    @cabins = Cabin.group(:ship_id).count
    @cabins.each do |group|
      @cabins_available << group[1]
      @cabins_available << group[1]
    end

    puts @cabins_available
    puts @cruise_names
  end
end

额外优化建议

其实可以用Ruby更简洁的写法替代循环,让代码更优雅易读:

  • 对于@cruise_names,直接用pluck方法一步获取指定字段的值:
    @cruise_names = @cruises.pluck(:name)
    
  • 对于@cabins_available,如果你的需求是把每个分组的数量重复两次加入数组,可以这样简化:
    @cabins_available = @cabins.values.flat_map { |count| [count, count] }
    

这样既减少了代码量,也能避免这类初始化遗漏的低级问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:17:44