Значение действия контроллера не передается в JavaScript с Gon Gem - PullRequest
0 голосов
/ 01 сентября 2018

Он очень озадачен этой проблемой. У меня есть простая форма, которая имеет remote: true метод. Я просто пытаюсь получить пользовательский ввод из формы и отправить его в JavaScript для дальнейшего использования.

/ главная / приложение / контроллеры / queries_controller.rb

В контроллере, когда я использую pry, все значения, которые я ожидаю там, есть, но когда дело доходит до значения gon, отправляемого в javascript, оно всегда undefined.

def index
    search_term = params[:query]
    @stats = Query.api_response(search_term)
    gon.stats = @stats

    respond_to do |format|
        format.js
        format.html
    end
  end

/ главная / приложение / модели / query.rb

    class Query < ApplicationRecord

        def self.api_response(term)
            url = "https://api.ritekit.com/v1/stats/history/#{term}?tags=&client_id="
            api = "1234567890123456789"
            return HTTParty.get(url + api)
         end        
 end

вид / общий / _form.html.erb

<%= form_tag queries_path, method: :get, remote: true do %>
    <%= text_field_tag :query %><br>
    <%= submit_tag 'Search' %>
<% end %>

/ главная / приложение / просмотров / запросы / index.js.erb

Это значение не определено при отправке на консоль.

$(document).ready(function(){
  console.log(gon.stats)
});

/ главная / приложение / просмотров / макеты / application.html.erb

<!DOCTYPE html>
<html lang="en">
  <head>
    <%= include_gon %>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
    <%= stylesheet_link_tag    "application" %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
        <script src="https://cdn.datatables.net/plug-ins/1.10.19/api/sum().js"></script>
        <link href="https://fonts.googleapis.com/css?family=Righteous" rel="stylesheet">
  </head>

Я тоже пробовал

<%= content_tag "div", id: "foobar", data: {value: @stats} do %><% end %>

и получил undefined также, когда я использовал jQuery для доступа к нему.

Я действительно озадачен этим, и это беспокоит меня, потому что прошло несколько дней, и я до сих пор не получаю ожидаемого результата. Буду очень признателен за любую помощь.

1 Ответ

0 голосов
/ 01 сентября 2018

Насколько я знаю gon не позволяет этому. Или, по крайней мере, не существует готового механизма для обновления переменной gon через ajax-запрос. У них есть gon.watch, но это для других случаев использования.

И я думаю, тебе это не нужно. Когда ваш сервер отвечает шаблоном .js.erb, у вас уже есть доступ к данным в javascript. Вы можете получить доступ к переменной @stats как <%= @stats %>. Нет необходимости использовать gon там.

...