有人可以解释为什么我在 localhost:3000 上收到此错误消息吗?

Can someone explain why I get this error message on localhost:3000?

尝试加载

时,我在 localhost:3000 上不断收到以下错误消息

undefined method `<<' for nil:NilClass

提取的源代码(大约第 10 行): 8个 9 10 11 12 13

@cabins =Cabin.group(:ship_id).count
@cabins.each do |group|
  @cabins_available <<group[1]
  @cabins_available <<group[1]
end
puts @cabins_available

这是代码

class TravelagentController < ApplicationController
def index
  @cruises = Cruise.all
  @cruise_names = []
  @cruises.each do |cruise|
    @cruise_names <<cruise.name
  end
  @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

欢迎使用 Whosebug。

请尝试从某人那里了解基础知识,这样您就不会 "bullied"(正如您可能想的那样),因为您的问题非常基础,我知道每个人都从某个时候开始,但应该是自己思考的一部分就不发在这里了

您应该如何诊断问题:

nil是"nothing"而在ruby中是放在NilClass中而NilClass没有String的大部分方法或者IntegerArray 类。因此,如果错误消息显示 << 不是 nil 的方法,那么这意味着您将此运算符用于您假设为数组的对象,但它是 nil.

现在,如果您看到第 10 行:@@cabins_available <<group[1] 出现此错误并且运算符正在 @cabins_available 上使用,它应该是一个数组,但因为它是 nil 并且它是nil因为你之前没有声明,所以你应该声明。

请尽量不要抄袭别人的代码,否则你将对每一步都一无所知。尝试研究事物,你看到实施,至少足以理解它们。

解法:

class TravelagentController < ApplicationController
def index
  @cruises = Cruise.all
  @cruise_names = []
  @cabins_available = []
  @cruises.each do |cruise|
    @cruise_names <<cruise.name
  end
  @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