拼版阵列在红宝石will_paginate(Paginating an Array in Ruby

2019-06-18 18:29发布

我有一个数组@(第一级),看起来像这样:

[[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进行分页?

Answer 1:

当然,你可以使用WillPaginate::Collection跨集合构造任意分页。 假设阵列称为values

@values = WillPaginate::Collection.create(current_page, per_page, values.length) do |pager|
  pager.replace values
end

然后你可以把@values就像任何其他WillPaginate集合,其中包括将它传递给will_paginate视图助手。



Answer 2:

见https://github.com/mislav/will_paginate/blob/master/lib/will_paginate/array.rb

只是require 'will_paginate/array'你试试吧,它会工作得很好了。 如果是我,我会提出,在说config/initalizers/will_paginate_extensions.rb所以它的使用权,距无处不在。



Answer 3:

给定一个collection阵列中的Rails项目

will_paginate ~>3.0.5

collection.paginate(page: params[:page], per_page: 10)

返回该数组值的分页。

不要忘了require 'will_paginate/array'在控制器的顶部。



Answer 4:

这是基于在回答我的例子@克里斯 - 综

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


Answer 5:

我是不是在这个线程提供的答案真的很开心。

我想出了这个解决方案。

# 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”。



文章来源: Paginating an Array in Ruby with will_paginate