在 ruby 中接收未定义的方法错误(无 rails)

Receiving undefined method error in ruby (no rails)

我对这个很陌生,所以我为我的无知道歉,我在问之前搜索了资源。

我使用的是常规 ruby,我使用的是 API。

当我做 运行 事情时,我一直收到未定义的方法错误,我不知道为什么。

所以,这是我的代码....问题是我认为的最后两种方法...但我不明白这是什么原因导致我调用的方法#print_lighting_time出现为未定义。其他资源表明这通常是对象的问题,但我想这对我来说没有意义...

这是无法正常工作的 CLI 代码

class Cli
    def start 
       puts "Shabbat Shalom!"
       Api.get_data
       check_date_options
    end

def check_date_options
    puts "Curious when to light your candles for Shabbos? Type 'Dates' to find out!"
    check_date
end

    def check_date 
        input = get_input

            if input == "Dates"
                list_dates
            else 
                invalid_date  
            end
    end

    def get_input
        gets.chomp
      end 

    def invalid_date
        puts "Invalid date! Check your date and reenter!"
        binding.pry
    end

    def list_dates
          CandleLighting.all.each_with_index do |title, index|
            puts "#{index}. #{title.date}"
        end

        lighting_times_info_list
    end
    
  def lighting_times_info_list
        puts "Select the date to view the lighting time!" 
        lighting_times_info
    end

def lighting_times_info
    input = get_input
        
    if input.to_i.between?(0, 60)

        index = input.to_i 
       date = CandleLighting.all[index]
        print_lighting_time(date)
    else 
        invalid_date
        lighting_times_info_list
    end


def print_lighting_time(date)
    puts "Shabbos is:#{date}"
    puts "Light candles by: #{date.title}"
      
end 
end
end

这里是 CandleLighting 的代码 class

class CandleLighting

    attr_accessor :title, :date

    @@all = []

    def initialize(title, date)
        @title = title
        @date = date
        @@all << self
    end

    def self.all 
        @@all 
    end
end

和 API

的代码
class Api
def self.get_data
    load_candlelightings
end

    def self.load_candlelightings
        response = RestClient.get("https://www.hebcal.com/hebcal?v=1&cfg=json&maj=on&min=on&mod=on&nx=on&year=now&month=x&ss=on&mf=on&c=on&geo=geoname&geonameid=5128581&m=50&s=on")
        data = JSON.parse(response.body)
        data["items"].each do |hash|
            CandleLighting.new(hash["title"], hash["date"]) if hash["title"].include?("Candle lighting")

        end  
    end
end 

最后是与 CLI 第 52 行相关的错误消息,该行是“print_lighting_time(date)

Traceback (most recent call last):
        6: from bin/run:4:in `<main>'
        5: from /Users/allisonperry/Development/code/Mod1/candle-lighting-times/lib/cli.rb:5:in `start'
        4: from /Users/allisonperry/Development/code/Mod1/candle-lighting-times/lib/cli.rb:10:in `check_date_options'
        3: from /Users/allisonperry/Development/code/Mod1/candle-lighting-times/lib/cli.rb:17:in `check_date'
        2: from /Users/allisonperry/Development/code/Mod1/candle-lighting-times/lib/cli.rb:37:in `list_dates'
        1: from /Users/allisonperry/Development/code/Mod1/candle-lighting-times/lib/cli.rb:42:in `lighting_times_info_list'
/Users/allisonperry/Development/code/Mod1/candle-lighting-times/lib/cli.rb:52:in `lighting_times_info': undefined method `print_lighting_time' for #<Cli:0x00007fa94f883e48> (NoMethodError)

我不确定是否需要所有这些代码来提供帮助...但我已经尝试解决这个问题很长一段时间了,但它没有发生。

提前致谢!

将其放入代码编辑器并适当地缩进它可以揭示问题所在。 print_lighting_time 定义在 lighting_times_info.

  def lighting_times_info
    input = get_input
    
    if input.to_i.between?(0, 60)
      
      index = input.to_i 
      date = CandleLighting.all[index]
      print_lighting_time(date)
    else 
      invalid_date
      lighting_times_info_list
    end
    
    
    def print_lighting_time(date)
      puts "Shabbos is:#{date}"
      puts "Light candles by: #{date.title}"
      
    end 
  end

应该改为...

  def lighting_times_info
    input = get_input
    
    if input.to_i.between?(0, 60)
      index = input.to_i 
      date = CandleLighting.all[index]
      print_lighting_time(date)
    else 
      invalid_date
      lighting_times_info_list
    end
  end
    
  def print_lighting_time(date)
    puts "Shabbos is:#{date}"
    puts "Light candles by: #{date.title}"
  end 

缩进是防止此类错误的重要视觉指南。

Atom or VSCode will indent for you and can warn you of common mistakes. Tools such as rubocop 这样的好编辑器会检查您的代码是否存在常见错误。