2012-01-26 11 views
13

voglio applicare impaginazione multipla con Kaminari tramite Ajax ora qui è il mio codice per il controllerimpaginazione multipla con kaminari tramite 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 

ora viste ho due parziali per rendere questo array

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

interno parziale è

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

script per l'aggiornamento impaginazione viene gestita in sé parate file

Ma facendo tutto non si aggiorna a stato di pagina né il contenuto nella pagina.

risposta

14

vi manca di passare params in questa linea

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

penso che dovrebbe essere simile a questo

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

e voi stanno passando anche param sbagliato in questa linea

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

dovrebbe essere così

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

e verificare inoltre che si invii la risposta correttamente al file JS oppure no.

5

Ho trovato questa domanda alla ricerca di impaginare più modelli sulla stessa pagina. Non mi è chiaro come l'impaginazione per la collezione @notes sia destinata a funzionare, ma come presentato, le soluzioni impagineranno solo la raccolta @bookmarks tramite AJAX.

Ci saranno problemi se si desidera mantenere l'impaginazione per entrambe le raccolte tramite html OPPURE se si modifica il file js per eseguire il rendering di entrambe le raccolte.

ho implementato una soluzione al mio problema simile in questo modo:

  1. Una visualizzazione HTML che rende un modello con due parziali: uno per @notes (compreso il suo aiutante impaginazione) e un altro che rende @bookmarks con il suo aiutante impaginazione
  2. link di paginazione contrassegnati con remote: true
  3. Uno js vista che rende nuovamente i due parziali, qualcosa come

    $('#notes_container').html('<%= j(render partial: 'paginated_notes_list') %>'); 
    $('#bookmarks_container').html('<%= j(render partial: 'paginated_bookmarks_list'); %>'); 
    
  4. Questa è la chiave: collegamenti di impaginazione che considerano la pagina corrente dell'altro modello come un parametro. In questo modo non "perdi" la pagina in cui ti trovi nell'altro modello.

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

Anche in questo caso, io non sono davvero chiare su come il sistema del richiedente dovrebbe funzionare, ma questa soluzione consentirà all'utente di scorrere entrambi i modelli senza perdere il loro "posto" in un altro modello di via AJAX o html.

Problemi correlati