2012-06-13 10 views
6

Estoy tratando de cambiar los enlaces will_paginate del formato de /list?page=1 a /list/page/1. Tengo la configuración de rutas correcta para esto, pero will_paginate está utilizando la cadena de consulta en enlaces en lugar de mi bonito estilo de URL. ¿Cómo decirlo de otra manera?¿Cómo cambiar las URL de will_paginate?

estoy usando will_paginate 2.3.16 y rieles 2.3.14.

Respuesta

9

will_paginate usa el ayudante url_for. Si define rutas que contienen los parámetros que utiliza, debe generar URLs bonitas.

map.connect '/lists/page/:page', :controller => 'lists', :action => 'index' 

Por favor asegúrese, se define esta ruta anterior ninguna ruta que también podría coincidir con su acción del controlador. Aún mejor: excluya la acción del índice como esta:

map.resources :lists, :except => [:index] 
+1

Gracias. ¡Acabo de arruinar mis rutas! Gracias por su respuesta y aquí hay un bounty – babonk

+3

Ahora 'map.connect' llamado' match '/ list/page /: page' => 'lista # index''. Anw, hay un error tipográfico en tu 'map.connnect' @iblue, diciendo simplemente porque esta publicación fue útil para mí: D Por favor, corrígeme si estoy equivocado, novato de carriles – ksugiarto

+0

Tienes razón. Corregí el error tipográfico. – iblue

1

tiene varias opciones aquí:

primera opción: patch mono WillPaginate::ActionView::LinkRenderer#url, que actualmente cuenta con la siguiente lógica url:

def url(page) 
    @base_url_params ||= begin 
    url_params = merge_get_params(default_url_params) 
    merge_optional_params(url_params) 
    end 

    url_params = @base_url_params.dup 
    add_current_page_param(url_params, page) 

    @template.url_for(url_params) 
end 

Por lo tanto, me imagino que usted puede hacer algo como "/list/page/#{page}" lugar.

La otra forma es implementar completamente el renderizador (mediante la subclasificación de WillPaginate::ViewHelpers::LinkRenderer), y proporcionándolo como :renderer => MyRendererClass al llamar a will_paginate.

Cuestiones relacionadas