当您获得 Array 的未定义方法页面时,可能您正在使用 kaminari gem,并且您正试图在控制器操作中对模型进行分页。
NoMethodError at /
undefined method `page' for # Array
您需要提醒自己两件事,您愿意分页的集合可以是 Array 或 ActiveRecordRelation,当然还有其他。 p>
要查看差异,假设我们的模型是 Product,并且我们在 products_controller.rb 上的 index 操作中。我们可以使用以下内容之一来构造我们的 @products:
@products = Product.all
或
@products = Product.where(title: 'title')
或别的东西……等等
无论我们以何种方式获取您的@products,但类别不同。
@products = Product.all
@products.class
=> Array
和
@products = Product.where(title: 'title')
@products.class
=> Product::ActiveRecordRelation
因此,根据集合的类别,我们愿意为 Kaminari 提供分页:
@products = Product.where(title: 'title').page(page).per(per)
@products = Kaminari.paginate_array(Product.all).page(page).per(per)
总结一下,给模型添加分页的好方法:
def index
page = params[:page] || 1
per = params[:per] || Product::PAGINATION_OPTIONS.first
@products = Product.paginate_array(Product.all).page(page).per(per)
respond_to do |format|
format.html
end
end
在你想要分页的模型内部(product.rb):
paginates_per 5
# Constants
PAGINATION_OPTIONS = [5, 10, 15, 20]