Когда вы получаете неопределенную страницу метода для Array, возможно, вы используете kaminari gem и пытаетесь разбить вашу модель на части внутри действия контроллера.
NoMethodError at /
undefined method `page' for # Array
Там вам нужно напомнить себе о двух вещах, что коллекция, которую вы хотите разбить на страницы, может быть Array или ActiveRecordRelation или, конечно, чем-то другим.
Чтобы увидеть разницу, предположим, что наша модель - Продукт, и мы находимся внутри нашего действия index для products_controller.rb . Мы можем построить наши @ 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]