我有一个@ level1数组,如下所示:
[[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对此进行分页?
答案 0 :(得分:78)
请参阅https://github.com/mislav/will_paginate/blob/master/lib/will_paginate/array.rb
在尝试之前只需require 'will_paginate/array'
即可。如果是我,我会把它放在config/initalizers/will_paginate_extensions.rb
说,所以它可以立即在任何地方使用。
答案 1 :(得分:26)
当然,您可以使用WillPaginate::Collection
在集合中构建任意分页。假设一个名为values
的数组:
@values = WillPaginate::Collection.create(current_page, per_page, values.length) do |pager|
pager.replace values
end
然后,您可以像处理任何其他WillPaginate集合一样处理@values
,包括将其传递给will_paginate
视图助手。
答案 2 :(得分:5)
在Rails项目中给出will_paginate ~>3.0.5
collection.paginate(page: params[:page], per_page: 10)
数组
require 'will_paginate/array'
返回数组值的分页。
不要忘记控制器顶部的{{1}}。
答案 3 :(得分:2)
这是我在@ 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
答案 4 :(得分:0)
我对这个主题中提供的答案真的不满意。
我想出了这个解决方案。
# app/lib/paged_array.rb
require 'will_paginate/array'
class PagedArray
delegate_missing_to :@paged_collection
def initialize(collection, page: 1, per_page: 20)
@paged_collection = collection.paginate(
page: page,
per_page: per_page
)
end
end
您可以这样使用它:
superheroes = %w[spiderman batman superman ironman]
PagedArray.new(superheroes, page: 1, per_page: 2)
我喜欢此解决方案,因为它是显式的,并且您不会污染您的标准类。
话虽这么说,因为我使用“ delegate_missing_to”,所以您依赖于rails。