Как передать координаты HTML5 Geolocation API моему контроллеру Rails? - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь создать простое добавление, используя гем Open Weather API, где пользователь может нажать кнопку, и отображается текущая погода в их местоположении. Я хотел бы использовать API геолокации HTML5 для возврата координат текущего местоположения пользователя и использовать их для извлечения данных из API Open Weather. Как передать значения latitude и longitude из моего JS в мой контроллер или класс обслуживания? На данный момент у меня есть этот код:

locations.js

var x = document.getElementById("demo");
function getLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
  } else {
    x.innerHTML = "Geolocation is not supported by this browser.";
  }
}

function showPosition(position) {
  x.innerHTML = "Latitude: " + position.coords.latitude + 
  "<br>Longitude: " + position.coords.longitude; 
}

услуги / open_weather_api.rb

class OpenWeatherApi
  require 'open_weather'

  def initialize(lat, lon, units, appid = "abcdef123456")
    @options = { units: "metric", APPID: appid }
    @lat = lat
    @lon = lon
  end

  def my_location_forecast
    OpenWeather::Current.geocode(@lat, @lon, @options)
  end
end

forecast_controller.rb

class ForecastsController < ApplicationController

  def current_weather
    @forecast = OpenWeatherApi.new(@lat, @lon, @options).my_location_forecast
  end
end

current_weather.html.erb

<p>Forecast: <%= @forecast['weather'][0]['description']%></p>

1 Ответ

0 голосов
/ 02 июня 2019

Вы можете сделать что-то подобное, не забудьте изменить в соответствии с вашими потребностями.

В location.js вы можете сделать запрос ajax

$.ajax({
  type: "GET",
  dataType: "json",
  url: "/locations",
  data: { latitude: latitude, longitude: longitude }
  success: function(data){
 }
});

А в вашем контроллере

class ForecastsController < ApplicationController
  before_action :set_locations, only: [:current_weather]

 def locations
  @lat = param["data"]["latitude"]
  @lon = params["data"]["longitude"]
  respond_to do |format|
   format.json { success: "success" }
  end
 end

  def current_weather
    @forecast = OpenWeatherApi.new(@lat, @lon, @options)
  end
end

и

 routes.rb

get "/location", to: "forecasts#locations"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...