使用will_paginate在Ruby中分页数组
我有一个数组@水平1,看起来像这样:
[[3.0, 4, 2], [2.0, 48, 3], [2.1, 56, 4], ............]
我想在这个数组上应用分页,这样每个页面一次只显示几行。 我试过这个:
@temp1 = @level1.paginate(:page => params[:page])
但它会引发以下错误:
undefined method `paginate' for [[3.0, 4, 2], [2.0, 48, 3], [2.1, 56, 4]]:Array
如何使用will_paginate对此进行分页?
当然,你可以使用WillPaginate::Collection
在集合上构build任意的分页。 假设一个名为values
的数组:
@values = WillPaginate::Collection.create(current_page, per_page, values.length) do |pager| pager.replace values end
然后,您可以像处理任何其他WillPaginate集合一样处理@values
,包括将它传递给will_paginate
视图助手。
见https://github.com/mislav/will_paginate/blob/master/lib/will_paginate/array.rb
在试用之前只require 'will_paginate/array'
,它就可以正常工作。 如果是我的话,我会把它放在config/initalizers/will_paginate_extensions.rb
这样它就可以config/initalizers/will_paginate_extensions.rb
使用。
给定一个Rails项目中的collection
数组
will_paginate ~>3.0.5 collection.paginate(page: params[:page], per_page: 10)
返回数组值的分页。
不要忘记在控制器的顶部require 'will_paginate/array'
。
这是我的例子,基于@ chris-heald的回答
products = %w(i love ruby on rails) @products = WillPaginate::Collection.create(params[:page], params[:per_page], products.length) do |pager| pager.replace products[pager.offset, pager.per_page] end