Rails:使用Kaminari对自定义偏移进行分页

时间:2013-08-14 18:27:19

标签: ruby-on-rails pagination kaminari

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

  

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

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

2 个答案:

答案 0 :(得分:4)

这可能会对您有所帮助:

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)进行测试

答案 1 :(得分:1)

您可以使用负值填充,假设您通常每页显示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