我正在尝试为if
放置错误数据的用户声明。
这是我的代码:
class Breweries::CLI
def start
puts "Hello!"
puts "---------------------------"
puts "Please enter your location:"
input = gets.strip.downcase
@data = Breweries::API.get_breweries(input)
@objects = Breweries::HoppyCode.all
if input.length < 1
puts "Sorry!!"
puts "```````"
start
else
display_info
end
end
def display_info
puts "You'll love the following spots!"
puts "********************************"
@objects.each.with_index(1) {|brewery, index| puts "#{index}. #{brewery.name}"}
puts "Please make a selection by index number for more information:"
input = gets.strip.downcase
if(input.to_i > 0)
@brewery = @objects[input.to_i - 1]
puts "name: #{@brewery.name}"
puts "street: #{@brewery.street}"
puts "city: #{@brewery.city}"
puts "phone: #{@brewery.phone}"
puts "website_url: #{@brewery.website_url}"
display_info
elsif (input == "quit")
quit
elsif (input == "menu")
start
end
end
def quit
puts "Goodbye. Drink responsibly and enjoy."
end
end
当我放置会产生错误的内容时,它返回以下内容:
Please enter your location: nvifpejvf80ejvip
Traceback (most recent call last):
2: from bin/breweriesCLI:6:in `<main>'
1: from /home/munificent-format-5297/Development/breweries/lib/breweries/cli.rb:8:in `start' /home/munificent-format-5297/Development/breweries/lib/breweries/api.rb:6:in `get_breweries': undefined method `[]' for nil:NilClass (NoMethodError)
如何解决未定义方法'[]'的错误?如果有必要,这里是API代码。
class Breweries::API
def self.get_breweries(input)
@breweries_hash = HTTParty.get("https://api.openbrewerydb.org/breweries?by_city=#{input}")
breweries_obj = {
name: @breweries_hash[1]["name"],
street: @breweries_hash[3]["street"],
city: @breweries_hash[4]["city"],
phone: @breweries_hash[10]["phone"],
website_url: @breweries_hash[11]["website_url"]
}
Breweries::HoppyCode.new(breweries_obj)
end
end
当输入无效时,调用
@breweries_hash = HTTParty.get("...")
返回的不是您期望的对象(我建议它返回一个空哈希。)这使得无法获得以下各行的详细信息。根据您如何处理它,您可能会决定例如从此函数或早返回raise
,或执行其他操作。
要解决此问题,请从调试问题开始,如下所示:
@breweries_hash = HTTParty.get("...")
puts @breweries_hash.inspect
...
这样,您将看到返回的内容并获得如何处理它的想法。
如果我是对的,并且返回的是一个空哈希,那么您可能希望尽早从此函数返回。
@breweries_hash = HTTParty.get("...")
return if @breweries_hash.empty?
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句