У меня есть простое приложение, которое вызывает API и возвращает данные о погоде.Пользователь может искать город, и возвращается текущая температура.У меня проблема, хотя, когда поле поиска пустое или город не распознан, я получаю ошибку undefined method
[] 'для nil: NilClass`.Вот мой код:
reports_controller.rb
class ForecastsController < ApplicationController
def current_weather
@token = Rails.application.credentials.openweather_key
@city = params[:q]
if @city == nil
@forecast = ""
else
@forecast = OpenWeatherApi.new(@city, @token).my_location_forecast
end
end
end
services / open_weather_api.rb
class OpenWeatherApi
include HTTParty
base_uri "http://api.openweathermap.org"
def initialize(city, appid)
@options = { query: { q: city, APPID: appid } }
end
def my_location_forecast
self.class.get("/data/2.5/weather", @options)
end
end
current_weather.html.erb
<%= form_tag(current_weather_forecasts_path, method: :get) do %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %><br>
<p>Current temperature: <%= @forecast['main']['temp'].to_i - 273 %>°C</p>
Очевидно, что код ['main']['temp'].to_i - 273
не может быть вызван на nil
, но как я могу предотвратить @forecast
, чтобы он был nil
, когда ничего не передается в форме или когда API не распознает город?