我正在我的网站上建立一个新闻版块铁路网站它使用将分页用于分页。现在我想知道如何指定自定义偏移量对于带有 will_paginate 的第一页。像这样的东西:
@featured_news = Post.first
@news = Post.offset(1).paginate(:page => params[:page])
我需要最新新闻条目是特殊的并且不包含在@news对象中。
我怎样才能做到这一点?
谢谢你的时间!
will_paginate
重新定义每一个offset
and limit
查询条件,获取特定页面的行。我可以为你看到两个选择:
丑陋的一点:利用 will_paginate 适用于集合的事实,并使用此语法(尽管它会加载所有表)
@news = Post.offset(1).all.paginate(:page => params[:page])
较长的:叉子will_paginate
gem,以便它可以处理自定义偏移量。我还没有尝试过,但是类似的东西应该可以工作(对 gem 的更改突出显示)
# 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
这应该允许您使用以下语法:
@news = Post.paginate(:page => params[:page], :offset => 1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)