Подтвердить что ты не робот

Многократное разбиение на страницы с каминари через Ajax

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

def user_note
    @user = current_user
    @notes = Bookmark.where('user_id = ? && note is not NULL',current_user.id).order('created_at DESC').page(params[:page_1]).per(4)

    @bookmarks = Bookmark.where('user_id = ? && note is NULL',current_user.id).order('created_at DESC').page(params[:page_2]).per(4)

    respond_to do |format|
      format.html
      format.xml{ render :xml => @user}
    end   end

теперь для представлений у меня есть две частичные части для рендеринга этих массивов

<div id="bookmarks">
<%= render :partial =>"users/bookmark",:locals => { :bookmark => @bookmarks} %>
            </div>
<%= paginate @bookmarks,:remote => true, :param_name => 'page' %>

внутренняя частичная

<% bookmark.each do |bookmar| %>
  <%= render :partial => 'show_bookmark.html.erb' , :locals => { :bookma => bookmar} %>
<%end%>

script для обновления pagination обрабатывается в отдельном файле

$('#bookmarks').html('<%= escape_javascript render(:partial =>"users/bookmark",:locals => { :bookmark => @bookmarks}) %>');
$('#paginator').html('<%= escape_javascript(paginate(@bookmarks, :remote => true).to_s) %>');

Но, делая все, он не обновляет до состояния страницы ни содержание на странице.

4b9b3361

Ответ 1

вам не хватает параметров в этой строке

$('#paginator').html('<%= escape_javascript(paginate(@bookmarks, :remote => true).to_s) %>');

Я думаю, что это должно быть так

$('#paginator').html('<%= escape_javascript(paginate(@bookmarks, :remote => true, :param_name => 'page_2').to_s) %>');

и вы также передаете неверный параметр в этой строке

<%= paginate @bookmarks,:remote => true, :param_name => 'page' %>

он должен быть таким

<%= paginate @bookmarks,:remote => true, :param_name => 'page_2' %>

и, пожалуйста, также проверьте, правильно ли вы отправляете ответ в файл JS или нет.

Ответ 2

Я нашел этот вопрос, пытаясь разбивать страницы на несколько страниц на одной странице. Мне непонятно, как будет предназначено разбиение на страницы для коллекции @notes, но, как представлено, решения будут только разбивать коллекцию @bookmarks через AJAX.

Будут проблемы, если вы хотите сохранить разбивку на страницы для обеих коллекций через html ИЛИ, если вы измените файл js, чтобы отобразить обе коллекции.

Я применил решение для моей аналогичной проблемы:

  • Представление html, которое отображает шаблон с двумя частичными: один для @notes (включая его помощник для разбивки на страницы) и другой, который отображает @bookmarks с помощью вспомогательного помощника
  • Разделительные ссылки, помеченные remote: true
  • Один вид js, который повторно отображает два частичных элемента, что-то вроде

    $('#notes_container').html('<%= j(render partial: 'paginated_notes_list') %>');
    $('#bookmarks_container').html('<%= j(render partial: 'paginated_bookmarks_list'); %>');
    
  • Это ключ: ссылки на страницы, которые используют текущую страницу другой модели в качестве параметра. Таким образом, вы не "теряете", на какой странице вы находитесь в другой модели.

    <%= paginate @notes, param_name: 'page_1', params: {page_2: params[:page_2]} %>
    <%= paginate @bookmarks, param_name: 'page_2', params: {page_1: params[:page_1]} %>
    

Опять же, я не совсем понимаю, как должна функционировать система афер, но это решение позволит пользователю перейти через обе модели, не теряя своего "места" в другой модели через AJAX или html.