加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 获取will_paginate以在第一页上定义自定义偏移

发布时间:2020-12-16 23:15:21 所属栏目:百科 来源:网络整理
导读:我正在我的rails网站上建立一个新闻栏目,它使用will_paginate进行分页.现在我想知道如何使用will_paginate为第一页指定自定义偏移量.这样的事情: @featured_news = Post.first@news = Post.offset(1).paginate(:page = params[:page]) 我需要最新的新闻条目
我正在我的rails网站上建立一个新闻栏目,它使用will_paginate进行分页.现在我想知道如何使用will_paginate为第一页指定自定义偏移量.这样的事情:
@featured_news = Post.first
@news = Post.offset(1).paginate(:page => params[:page])

我需要最新的新闻条目是特殊的,不包含在@news对象中.

我怎么能做到这一点?

谢谢你的时间!

解决方法

will_paginate重新定义每个偏移量并限制查询条件,以获取特定页面的行.我可以看到两个选项:

丑陋的:利用will_paginate对集合起作用的事实,并使用这种语法(它会加载你的所有表格)

@news = Post.offset(1).all.paginate(:page => params[:page])

较长的一个:分叉will_paginate 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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读