2011-03-30 8 views
10

La generación de URL de Kaminari omite el parámetro de página si está generando el enlace de regreso a la primera página. Sin embargo, la aplicación está diseñada para seleccionar una página aleatoria si se omite el parámetro de página. El comportamiento predeterminado de Kaminari, entonces, impide regresar a la primera página de manera confiable.¿Cómo forzar a Kaminari a incluir siempre param de página?

He resuelto este problema, y ​​publicaré mi solución más adelante un poco más tarde, pero quería publicar esta pregunta para la posteridad, y también soy bastante nuevo en Rails, por lo que no estoy seguro de que mi solución el mejor o el más elegante, y estoy interesado en mejoras y refinamientos, ¡solo por mi propia edificación egoísta!

Respuesta

14

La línea de código en Kaminari que implementa el comportamiento que queremos cambiar está en lib/kaminari/helpers/tags.rb, en el método Kaminari::Helpers::Tag::page_url_for.

def page_url_for(page) 
    @template.url_for @template.params.merge(@param_name => (page <= 1 ? nil : page)) 
    end 

Para cambiar este comportamiento, he creado un archivo lib/kaminari/helpers/tag.rb, que contiene lo siguiente:

module Kaminari 
    module Helpers 
    class Tag 
     def page_url_for(page) 
     @template.url_for @template.params.merge(@param_name => (page < 1 ? nil : page)) 
     end 
    end 
    end 
end 

continuación remendé en el archivo añadiendo la siguiente línea a config/initializers/extensions.rb:

require "lib/kaminari/helpers/tag.rb" 

Mis disculpas por cualquier dificultad con la terminología de Ruby/Rails, todavía soy bastante nuevo para Ruby. Comentarios y críticas son bienvenidos.

+1

Gracias por su respuesta, esto me ayudó. Solo tengo una modificación, en Rails 3+ no incluyes 'lib' en la ruta requerida. Debe ser 'require' kaminari/helpers/tag.rb "' – jamesmk

8

ACTUALIZACIÓN

La nueva versión de la fuente kaminari requerirá esto como la línea de actualización:

@template.url_for @params.merge(@param_name => (page)) 

de lo contrario perderá otros parametros pasado a su llamada paginación.

Por el amor clairity aquí es la salida completa del nuevo código:

module Kaminari 
    module Helpers 
    class Tag 
     def page_url_for(page) 
     @template.url_for @params.merge(@param_name => (page)) 
     end 
    end 
    end 
end 

Usted aún así hacer esto dentro de un archivo de inicializadores como sugiere Daniel.

+1

Especifique la versión de kaminari cuando cambie el código. Necesito una versión de prueba de esto. Gracias. – Anil

+0

@Anil Esto funciona perfectamente en v0.17 – sequielo

+0

Lo agregué directamente en el inicializador de configuraciones de Kaminari, funciona como un encanto – sequielo

5

A partir de hoy (julio de 2016), el Kaminari master branch incluye un config optionparams_on_first_page, que es false por defecto.

configuración de esta opción de configuración para true incluirá params de página para todas las páginas, incluyendo página 1.

Tenga en cuenta que la rama principal no es una versión estable, a fin de utilizar con precaución!

0

Esta es la respuesta para el 2018 como estoy escribiendo esto:

Como se afirma en el Run kaminari github home page

esto para crear un archivo de configuración para kaminari:

rails g kaminari:config 

Esta voluntad crea un archivo kaminari_config.rb en tu config/inicializadores carpeta

Elimine la línea: config.params_on_first_page = false y reemplazar falsa por cierto:

config.params_on_first_page = true 

reiniciar su servidor si es necesario. Eso es todo :)

Cuestiones relacionadas