will_paginate
redefine cada offset
y limit
condiciones de consulta, para obtener las filas de una página específica. Veo dos opciones para usted:
la fea: aprovechar el hecho de que las obras will_paginate en colecciones, y utilizan esta sintaxis (se carga toda la mesa, aunque)
@news = Post.offset(1).all.paginate(:page => params[:page])
Cuanto más tiempo : bifurque la gema will_paginate
para que pueda manejar compensaciones personalizadas. Yo no lo he probado, pero algo como esto debería funcionar (los cambios en la gema se resaltan)
# will_paginate/lib/will_paginate/active_record.rb
module Pagination
def paginate(options)
options = options.dup
pagenum = options.fetch(:page) { raise ArgumentError, ":page parameter required" }
per_page = options.delete(:per_page) || self.per_page
total = options.delete(:total_entries)
#######################################
custom_offset = options.delete(:offset)
#######################################
count_options = options.delete(:count)
options.delete(:page)
#######################################################
# rel = limit(per_page.to_i).page(pagenum)
rel = limit(per_page.to_i).page(pagenum, custom_offset)
#######################################################
rel = rel.apply_finder_options(options) if options.any?
rel.wp_count_options = count_options if count_options
rel.total_entries = total.to_i unless total.blank?
rel
end
################################
# def page(num)
def page(num, custom_offset = 0)
################################
rel = scoped.extending(RelationMethods)
pagenum = ::WillPaginate::PageNumber(num.nil? ? 1 : num)
per_page = rel.limit_value || self.per_page
##################################################################
# rel = rel.offset(pagenum.to_offset(per_page).to_i)
rel = rel.offset(pagenum.to_offset(per_page).to_i + custom_offset)
##################################################################
rel = rel.limit(per_page) unless rel.limit_value
rel.current_page = pagenum
rel
end
end
Esto debería permitir el uso de esta sintaxis:
@news = Post.paginate(:page => params[:page], :offset => 1)
increíble! ¡Gracias! Creé un tenedor si alguien más lo necesita: https://github.com/opetznick/will_paginate –