2012-04-16 21 views
5

Por lo tanto, al usar Sphinx, las búsquedas están limitadas a 1000 resultados. Pero, si hay más de 1000 resultados, los enlaces de paginación generados por will_paginate no toman esto en cuenta y proporcionan enlaces a páginas posteriores al 1000/per_page. ¿Es la manera obvia de configurar max páginas o algo similar?Limite el número de páginas en will_paginate

Saludos.

Respuesta

1

He encontrado la mejor solución fue la de hacer esto:

@results = Model.search(...) 
if @results.total_pages >= (1000/Model.per_page) 
    class << @results; def total_pages; 1000/Model.per_page; end end 
end 

Cuando el 1000 es preferiblemente no codificada de manera no :). Esto se consigue el correcto comportamiento de la vista will_paginate ayudante de forma gratuita,

+0

jaja, esto es divertido y resuelve mi caso de uso inmediato. –

1
if params[:page].to_i * 30 <= 1000 
    @posts = Post.paginate(:page => params[:page], :per_page => 30) 
end 
12

Creo que es mejor para presentar el parámetro :total_entries al método paginate:

@posts = Post.paginate(:page => params[:page], :per_page => 30, 
         :total_entries => 1000) 

will_paginate generará enlaces sólo por el número de páginas necesarias para muestra 1000 resultados.

También puede verificar que la página solicitada pertenece al intervalo:

if params[:page].to_i * 30 <= 1000 
    @posts = Post.paginate(:page => params[:page], :per_page => 30, 
         :total_entries => 1000) 
end 

Por otra parte, mediante la presentación del parámetro :total_entries, se evita la consulta SQL COUNT que will_paginate normalmente se ejecuta para recuperar el número total de entradas.

Cuestiones relacionadas