首页 > arrays > will_paginate不使用数组

will_paginate不使用数组 (will_paginate not working with arrays)

问题

我已经添加

# config/initializers/will_paginate_array_fix.rb
require 'will_paginate/array'

但似乎还没有获得对数组的分页支持,例如:

def index
  @array = (1..100).to_a.paginate(params[:page])
end
# gives TypeError: can't convert Symbol into Integer

它适用于模型,我得到

defined? WillPaginate # => constant
ActiveRecord::Base.respond_to? :paginate # => true
# but:
Array.respond_to? :paginate # => false

任何人都知道我缺少什么来获得数组的分页支持?

解决方法

通过查看will_paginate / array中的源代码找到答案:

def paginate(options = {})
  page     = options[:page] || 1
  per_page = options[:per_page] || WillPaginate.per_page
  total    = options[:total_entries] || self.length

  WillPaginate::Collection.create(page, per_page, total) do |pager|
    pager.replace self[pager.offset, pager.per_page].to_a
  end
end

因此对于数组,您必须使用.paginate(而不是.page),并且必须将其作为哈希传递。以下是有效的:

def index
  @array = (1..100).to_a.paginate(page: params[:page])
end

问题

I've added

# config/initializers/will_paginate_array_fix.rb
require 'will_paginate/array'

but still do not seem to be getting pagination support for arrays, eg:

def index
  @array = (1..100).to_a.paginate(params[:page])
end
# gives TypeError: can't convert Symbol into Integer

It works fine with models, and I get

defined? WillPaginate # => constant
ActiveRecord::Base.respond_to? :paginate # => true
# but:
Array.respond_to? :paginate # => false

Anyone know what I am missing to get pagination support for arrays?

解决方法

Found the answer by looking at source code in will_paginate/array:

def paginate(options = {})
  page     = options[:page] || 1
  per_page = options[:per_page] || WillPaginate.per_page
  total    = options[:total_entries] || self.length

  WillPaginate::Collection.create(page, per_page, total) do |pager|
    pager.replace self[pager.offset, pager.per_page].to_a
  end
end

So for arrays, you have to use .paginate (not .page), and you have to pass it as a hash. So the following works:

def index
  @array = (1..100).to_a.paginate(page: params[:page])
end
相似信息