2012-01-26 2 views
13

Je veux appliquer la pagination multiple avec Kaminari via Ajax maintenant, voici mon code pour le contrôleurpagination multiple avec Kaminari via 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 

maintenant vues j'ai deux partials pour rendre ces tableaux

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

intérieure partielle est

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

pour la mise à jour de pagination est traitée dans un soi parate fichier

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

Mais en faisant tout ce n'est pas mettre à jour à l'état de la page ni le contenu de la page.

Répondre

14

vous manque pour passer params à cette ligne

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

Je pense qu'il devrait être comme ça

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

et vous passez aussi mal param à cette ligne

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

il devrait être comme ça

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

et vérifiez également si vous envoyez la réponse correctement au fichier JS ou non.

5

J'ai trouvé cette question à la recherche de pagination de plusieurs modèles sur la même page. Il n'est pas clair pour moi comment la pagination de la collection @notes est destinée à fonctionner, mais comme présenté, les solutions ne feront que paginer la collection @bookmarks via AJAX.

Il y aura des problèmes si vous souhaitez conserver la pagination pour les deux collections via html OU si vous modifiez le fichier js pour rendre les deux collections.

Je mis en œuvre une solution à mon problème similaire à ceci:

  1. Une vue html qui rend un modèle avec deux partials: un pour @notes (y compris son aide de pagination) et un autre qui rend @bookmarks avec son aide de pagination
  2. liens Pagination marqués avec remote: true
  3. un point de vue js qui re-deux rend les partials, quelque chose comme

    $('#notes_container').html('<%= j(render partial: 'paginated_notes_list') %>'); 
    $('#bookmarks_container').html('<%= j(render partial: 'paginated_bookmarks_list'); %>'); 
    
  4. Ceci est la clé: Les liens de pagination qui prennent en paramètre la page en cours de l'autre modèle. De cette façon, vous ne "perdez" pas la page sur laquelle vous êtes dans l'autre modèle.

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

Encore une fois, je ne suis pas vraiment clair sur la façon dont le système du demandeur est censé fonctionner, mais cette solution permettra à l'utilisateur à la page à travers les deux modèles sans perdre leur « place » dans l'autre modèle via AJAX ou html.

Questions connexes