请求解释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
相关产品推荐
相关产品推荐

