如果我通过网络表单添加新ID,我会获得新城市的天气。但如果ID错了,我会得到:
“未定义的方法`每个'为nil:NilClass”......
请告诉我,如何检查服务器的响应并显示消息“您输入的ID是否错误”?
例如,对错误ID的回复:
{"cod":"404","message":"City not found: 605856"}
my_form:
<%= form_tag("search", method: "get") do %>
<%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Go") %>
<% end %>
控制器:
@array = [703448,6058560,1819729] # ID cities
if params[:q].nil?
@cities = @array.join(",")
else
@array = @array << params[:q]
@cities = @array.join(",")
end
@lookup = Weather.call(@cities)
模型:
class Weather
include HTTParty
base_uri "http://api.openweathermap.org/data/2.5/group?appid=***********************
format :json
#call the api with HTTParty and parse the JSON response
def self.call list_ids
response = HTTParty.get(base_uri + '&id=' + list_ids)
body = JSON.parse(response.body)
list = body["list"]
end
答案 0 :(得分:1)
您可以将标准方法#fetch
用于此目的:
https://ruby-doc.org/core-2.4.1/Array.html#method-i-fetch
a = [ 11, 22, 33, 44 ]
a.fetch(1) #=> 22
a.fetch(-1) #=> 44
a.fetch(4, 'cat') #=> "cat"
a.fetch(100) { |i| puts "#{i} is out of bounds" }
#=> "100 is out of bounds"
还有一种方法#try
甚至更好&.
来防止出现无错误。以下是一些例子:
http://mitrev.net/ruby/2015/11/13/the-operator-in-ruby/
希望这会对你有帮助!
答案 1 :(得分:0)
调试信息&#34; def self.cal&#34;会非常有用:
Rails.logger.debug response.body
然后你就可以理解如何正确解析它。
答案 2 :(得分:0)
a=nil
puts a[:ram]
result: undefined method `[]' for nil:NilClass (NoMethodError)
为避免此类错误,您可以在nil_class.rb文件上创建并将其保存在Rails应用程序的initializers文件夹中。
class NilClass
def method_missing(method, *args)
""
end
end
a=nil
puts a[:ram]
result : ''
我们可以覆盖以避免错误。