Разбиение на страницы Rails - ввод данных Ajax с параметрами

Итак, я использую гем Kaminari для реализации бесконечной прокрутки в своем приложении. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз при вызове Ajax я передаю контроллеру параметры поиска.

def create
@onsearch = true
@lists = current_user.lists.all
@search = params[:search]
@page = params[:page]
puts "Search is #{@search}, page is #{@page}"
@outfits =  Oufits.where("description LIKE ?", "%#{params[:search]}%").page(params[:page]).per(20)
respond_to do |format|
  format.html
  format.csv { send_data @outfits.to_csv }
  format.xls
  format.js {render :layout => false }
end

конец

Это ajax, который я вызываю, когда пользователи прокручивают страницу до конца:

  $.ajax({
    type: "GET",
    url: url,
    data : { search : '<%= @search %>'},
    dataType: 'script',
    beforeSend: function(){
     $('.sk-wave').show();
    },
    complete: function(){
     $('.sk-wave').hide();
    },
    success: function(response){
     $('.sk-wave').hide();
     },
    error: function(jqXHR, textStatus, errorThrown ){
     alert("oh no! ajax went wrong.")
     $('.sk-wave').hide();
     console.log("jqXHR = "+JSON.stringify(jqXHR));
     console.log("textStatus = "+JSON.stringify(textStatus));
     console.log("errorThrown = "+JSON.stringify(errorThrown));
    }
  });
 }

Частичная часть, которую я отображаю, когда я отвечаю с помощью Javascript, работает нормально и отлично добавляет остальной контент на страницу.

$('.pagecontent').append("<%=j render(partial: 'search/outfits', 
format: 'html') %>");

<% if @outfits.current_page == @outfits.total_pages %>
 $('#view-more').remove();
<% else %>
 $('#view-more a').attr('href', '<%= url_for(page: 
 @outfits.current_page + 1) %>');
<% end %>

Но после проверки параметр поиска получен в виде буквальной строки '‹%= @search %>' в моем контроллере. Я гуглил, как передать переменную erb в javascript, но это кажется слишком сложным для того, что я пытаюсь сделать. Как тогда я могу убедиться, что он прошел каждый раз? Спасибо за вашу помощь


person Community    schedule 15.09.2017    source источник
comment
Где вы разместили код ajax? Какой файл?   -  person EJAg    schedule 15.09.2017


Ответы (1)


У вас есть несколько проблем:

'<%= @search %>' не работает так, как вы ожидали. Файлы активов в каталоге app/assets не имеют доступа к вашей переменной представлений, потому что они предварительно скомпилированы на сервере при развертывании приложения.

<input type="hidden" id="foo" name="zyx" value="<%= @search %>" />
var value = $('input#foo').val()

Чтобы передать переменную в ajax, используйте hidden_input со значением @search и извлеките ее с помощью jquery.

"GET" не имеет тела, что означает, что ваш ключ data передается как строка запроса.

Используйте "POST".

person Зелёный    schedule 15.09.2017
comment
О, хорошо, спасибо — я только что переместил свой JS в каталог app/assets, так что это имеет смысл! - person ; 15.09.2017
comment
@ Исаак, извините за мое невежество, возможно ли иметь переменную @search из действия create в файле create.js.erb. Я как бы сам задаю вопрос, извините guides.rubyonrails.org/ - person Fabrizio Bertoglio; 15.09.2017