Вызов функции в контроллере стимула из Rails Helper или Controller? - PullRequest
0 голосов
/ 21 марта 2020

Я работаю над приложением Rails, где я хочу использовать навигационный API Javascript, чтобы получить геолокацию моего пользователя. У меня есть код в контроллере в «app / javascript / location_controller», который работает.

import { Controller } from "stimulus"

export default class extends Controller {
    connect(){
        this.getUserLocation()
    }

    getUserLocation(){
        if (navigator.geolocation) {
           navigator.geolocation.getCurrentPosition((position) => console.log(position.coords), (error)=> console.log(error));
        } else {
            alert("Could not get your current location! Please allow location services for RiseUp.")
        }
    }
}

Как бы я go назвал getUserLocation из Rails Helper?

1 Ответ

0 голосов
/ 01 апреля 2020

Контроллеры Stimulus и вообще любой javascript запускаются не вашим ruby сервером, а браузером пользователя.

Если вы хотите получить от него значение, вам понадобится чтобы сделать ajax вызов и получить его от обычного контроллера рельсов.

Что-то вроде:

async getUserLocation() {
  let data = new FormData();
  let position = await navigator.geolocation.getCurrentPosition();
  data.set('position', position);
  await fetch('/api/notify_location', {method: 'POST', body: data, credentials: true});
}

И вы должны направить его на бэкэнд:

scope 'api' do
  post 'notify_location' => 'location#notify'
end

и получите его в контроллере

class LocationController < ApplicationController
  def notify
    # do as needed, you will be able to get the session here
    # because the fetch function was passed credentials: true
    # but beware, this request won't match `request.xhr?` because
    # fetch is not XMLHTTPRequest.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...