Доступ к переменной 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...