Почему мой запрос API возвращает ответ 400, используя HTTParty? - PullRequest
0 голосов
/ 06 июня 2019

Я создаю простое приложение Rails, которое извлекает данные из API Open Weather Map и возвращает текущие данные о погоде для города, который ищется в поле формы.Я хотел бы, чтобы вызов API выглядел, например, следующим образом:

http://api.openweathermap.org/data/2.5/weather?q=berlin&APPID=111111

Я проверял это в Postman с моим ключом API, он работает нормально, но с моим кодом он возвращает "cod":"400","message":"Nothing to geocode"

Кто-нибудь может увидеть, где я иду не так?Вот мой код* rout.rb

Rails.application.routes.draw do
  root 'forecasts#current_weather'
  resources :forecasts do
    collection do
      get :current_weather
    end
  end
end

1 Ответ

1 голос
/ 06 июня 2019

Ошибка описывает себя:

"cod":"400","message":"Nothing to geocode"

это означает, что вы не указали город в своем запросе. Одной из возможных причин этой ошибки является то, что вы переопределяете значение по умолчанию в вашем методе initialize с помощью переменной @options из контроллера в этой строке:

class ForecastsController < ApplicationController
  def current_weather
    @forecast = OpenWeatherApi.new(@options).my_location_forecast
  end
end

Из предоставленной вами информации вы не определили переменную @options в вашем контроллере или это nil. Так что это переопределяет значение по умолчанию метода initialize в OpenWeatherApi. Поскольку appid в вашем случае не изменится, изменится только название города, поэтому вы можете отправить его с контроллера.

def current_weather
  @city = params[:city] // the city you want to send to API. Change it with your value
  @forecast = OpenWeatherApi.new(@city).my_location_forecast
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...