2012-01-26 24 views
13

Quiero aplicar múltiples paginación con Kaminari a través de Ajax ahora aquí es mi código para el controladorpaginación múltiple con kaminari a través de 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 

ahora para vistas que tengo dos parciales para prestar este matrices

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

interior parcial es

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

secuencia de comandos para la actualización de paginación está siendo manejado en un sE parate file

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

Pero al hacer cada cosa no se actualiza el estado de la página ni el contenido de la página.

Respuesta

14

se echa en falta para pasar parametros en esta línea

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

creo que debe ser así

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

y también se están pasando parámetro incorrecto en esta línea

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

debería ser así

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

y compruebe también si está enviando la respuesta correctamente al archivo JS o no.

5

Encontré esta pregunta buscando paginar varios modelos en la misma página. No me queda claro cómo funcionará la paginación de la colección @notes, pero tal como se presentó, las soluciones solo van a paginar la colección @bookmarks a través de AJAX.

Habrá problemas si desea mantener la paginación para ambas colecciones a través de html O si cambia el archivo js para representar ambas colecciones.

he implementado una solución a mi problema similar como esto:

  1. una vista HTML que muestra una plantilla con dos parciales: uno para @notes (incluyendo su ayudante de paginación) y otro que presta @bookmarks con su ayudante de la paginación
  2. enlaces de paginación marcados con remote: true
  3. Una js opinión de que vuelve a renderizar los dos parciales, algo así como

    $('#notes_container').html('<%= j(render partial: 'paginated_notes_list') %>'); 
    $('#bookmarks_container').html('<%= j(render partial: 'paginated_bookmarks_list'); %>'); 
    
  4. Esta es la clave: enlaces de paginación que toman la página actual del otro modelo como parámetro. De esta forma, no "pierde" la página en la que está en el otro modelo.

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

Una vez más, no estoy muy claro sobre cómo se supone que el sistema del autor de la pregunta para funcionar, pero esta solución permitirá a los usuarios a la página a través de ambos modelos sin perder su "lugar" en el otro modelo a través AJAX o html.

Cuestiones relacionadas