【问题标题】:Rails: pagination with custom offset using KaminariRails:使用 Kaminari 使用自定义偏移进行分页
【发布时间】:2013-08-16 20:41:19
【问题描述】:

我正在使用 Kaminari 进行分页,并且在某种情况下需要第一页只包含 2 个条目,而彼此有 6 个条目。认为使用 padding() 可以实现这一点,但它似乎不像我那样工作'd 期望(文档也没有多大帮助):

a = (1..20).to_a
b = Kaminari.paginate_array(a).page(1).per(6).padding(2)
=> [3, 4, 5, 6, 7, 8]

关于如何实现这一点的任何想法?

【问题讨论】:

  • 你解决过这个问题吗?

标签: ruby-on-rails pagination kaminari


【解决方案1】:

这可能会对您有所帮助:

a = (1..20).to_a
b = Kaminari.paginate_array(a).page(1).per(6).offset(2)
=> [3, 4, 5, 6, 7, 8]

用 Kaminari(0.14.1) 测试

【讨论】:

  • 对,这也是我得到的(不受欢迎的)输出。问题是我如何让前两个条目显示为第一页。在这种情况下,我希望输出是:b = Kaminari.paginate_array(a).page(1).per(6).padding(2)=> [1,2]Thoughts?
  • 您可以在结果上使用 take(2) 而不是填充,例如:Kaminari.paginate_array(a).page(1).per(6).take(2) => [1, 2]
  • 使用 take() 意味着缺少 4 条记录(在第一页和第二页之间)。
【解决方案2】:

您可以为填充使用负值,假设您通常每页显示 6 个项目,但第一页仅显示 4 个。您仍将每个值设置为 6。然后在第 2+ 页上,您可以使用填充-2 以说明第 1 页中未使用的记录。

a = (1..20).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
b = Kaminari.paginate_array(a).page(1).per(6) # Get back 6 but only use 4
=> [1, 2, 3, 4, 5, 6]
c = Kaminari.paginate_array(a).page(2).per(6) # Get the next 6
=> [7, 8, 9, 10, 11, 12]
c.padding(-2) # Correct for the missing 2 on first page
=> [5, 6, 7, 8, 9, 10]

在你的控制器中你会做这样的事情:

@products = Product.active.page(params[:page]).per(6)
@products = @products.padding(-2) if !params[:page].nil? and params[:page].to_i > 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-04
    • 2011-09-26
    • 1970-01-01
    • 2012-11-24
    • 2011-07-06
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多