Доступ к переменной gon, которая ссылается на параметры формы

Я пытаюсь создать простую страницу, которая ищет пользователей github и отображает их последователей на странице, не обновляя страницу. Я использую Octokit для доступа к Github API и Gon для создания переменных контроллера, которые могут быть доступны в файлах js.erb. Я могу получить доступ к переменной gon, для которой задана строка, но не та, которая ссылается на параметры запроса. Как бы я это сделал?

class UsersController < ApplicationController
  def search
    github = Octokit::Client.new(:login => 'monzelb', :password => "#{Rails.application.secrets.github_key}")
    @query = params[:query]
    gon.query = @query
    @followers = github.followers("#{@query}")
    gon.followers = @followers
    @blah = "blah"
    gon.blah = @blah
    if @query
      respond_to do |format|
        format.js 
        format.html 
      end
    end
  end
end

пользователи / search.js.erb

console.log(gon.followers.first.login) # => nil
console.log(gon.blah) # => "blah"
$('body').append('<li class="result media"><%= j @followers.first.login %></li><img src= "<%= j @followers.first.avatar_url %>" class="result img">');

Jquery успешно добавляет изображение и имя первого подписчика на страницу при отправке формы, но мне нужно добавить ВСЕХ их подписчиков на страницу. Я думал, что Гон будет хорошим способом сделать это, но у него, похоже, нет доступа к запросу.

2 ответа

Я не уверен, почему вы делаете это:

@query = params[:query]
gon.query = @query
@followers = github.followers("#{@query}")
gon.followers = @followers
@blah = "blah"
gon.blah = @blah

Вместо этого вы должны сохранить @query, @followers, а также @blah переменные экземпляра, а затем подтолкнуть их к gon,

Так что-то вроде этого:

gon.push({
   query: @query,
   followers: @followers,
   blah: @blah
})

Я не знаю Js, Gon или Octokit, поэтому я не уверен, что этот ответ поможет вам.

Тем не менее, вы говорите, что видите только первого последователя. Но это совершенно нормально. Вот что делает ваш JS:

$('body').append('<li class="result media"><%= j @followers.first.login %></li><img src= "<%= j @followers.first.avatar_url %>" class="result img">');

Вы можете попробовать решение в Ruby, например:

<% @followers.each do |follower| %>
$('body').append('<li class="result media"><%= j follower.login %></li><img src= "<%= j follower.avatar_url %>" class="result img">');
<% end %>

Не уверен, что это сработает. Но в любом случае это, вероятно, можно сделать в JS вместо Ruby...

Другие вопросы по тегам