Как мне получить доступ к моему вспомогательному методу Rails в моем представлении?"Нулевое местоположение предоставлено. Невозможно создать URI" - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь создать приложение, которое возвращает URL-адрес gif в зависимости от текущей погоды в местоположении.Я использую API открытых погодных условий и храню свои URL-адреса в хэше в модуле и создаю метод, который выбирает URL-адрес gif на основе кода погоды, возвращенного из вызова API.Например, код 321 соответствует «слабому дождю», и затем должен быть возвращен gif, изображающий небольшой дождь.

Когда я запускаю свой код, я получаю ошибку аргумента Nil location provided. Can't build URI Я не уверен, что яправильный доступ к вспомогательному методу.Вызов API работает нормально, и я могу вернуть @weather_code на мой взгляд без проблем.Есть идеи, что вызывает это?Вот мой код:

reports_helper.rb

module ForecastsHelper
  GIFS = {
    thunder:
      {codes: [200, 201, 202, 210, 211, 212, 221, 230, 231, 232],
       urls: %w(
          https://media.giphy.com/media/26uf5HjasTtxtNCqQ/giphy.gif
          https://media.giphy.com/media/vS09bj1KrXwje/giphy.gif
          https://media.giphy.com/media/2pUAUd0cFntny/giphy.gif
)},
    light_rain:
      {codes: [300, 301, 302, 310, 311, 312, 313, 314, 321, 500, 501, 520, 521],
       urls: %w(
          https://media.giphy.com/media/xT9GEz2CeU9uaI2KZi/giphy.gif
          https://media.giphy.com/media/k28n1OPefBEeQ/giphy.gif
          https://media.giphy.com/media/H1eu9Vw957Rfi/giphy.gif

)},
    heavy_rain:
      {codes: [502, 503, 504, 522, 531, 511],
       urls: %w(
          https://media.giphy.com/media/1Yfxps0AHRYBR2tK2G/giphy.gif
          https://media.giphy.com/media/hk6czgfmwVJS0/giphy.gif
          https://media.giphy.com/media/26BGD4XaoPO3zTz9K/giphy.gif
)}
  }

  def find_gif_url
    GIFS.each do |key, value|
      if value[:codes].include? @weather_code
        value[:urls].sample
      end
    end
  end
end

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
    @temperature = @forecast.dig('main', 'temp').to_i - 273
    @weather_code = @forecast.dig('weather', 0, 'id').to_i
  end
end

current_weather.html.erb

<%= form_tag(current_weather_forecasts_path, method: :get) do %>
  <%= text_field_tag(:q) %>
  <%= submit_tag("Search") %>
<% end %><br>

<%= image_tag(find_gif_url, class: "gif") %>

1 Ответ

3 голосов
/ 08 июня 2019

Вы перебираете все GIFS, но не возвращаете, когда есть соответствующий код.Измените

def find_gif_url
  GIFS.each do |key, value|
    if value[:codes].include? @weather_code
      value[:urls].sample
    end
  end
end

на

def find_gif_url
  GIFS.each do |key, value|
    if value[:codes].include? @weather_code
      return value[:urls].sample
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...