Подтвердить что ты не робот

Undefined метод `page 'для # <Массив: 0xafd0660>

Я не могу пройти мимо этого. Я знаю, что я читал, что не существует метода страниц для массивов, но что мне делать?

Если я запустил Class.all в консоли, он вернет #, но если я запустим Class.all.page(1), я получаю вышеуказанную ошибку.

Любые идеи?

4b9b3361

Ответ 1

Нет Массив не имеет метода страницы.

Похоже, вы используете kaminari. Class.all возвращает массив, поэтому вы не можете вызвать страницу на нем. Вместо этого используйте Class.page(1) напрямую.

Для нормальных массивов каминари имеет отличный вспомогательный метод:

Kaminari.paginate_array([1, 2, 3]).page(2).per(1)

Ответ 2

В Kaminari теперь есть метод для разбиения на страницы массивов, поэтому вы можете сделать что-то подобное в своем контроллере:

myarray = Class.all
@results = Kaminari.paginate_array(myarray).page(params[:page])

Ответ 3

Когда вы получаете страницу метода undefined для массива, возможно, вы используете драгоценный камень kaminari, и вы пытаетесь разбивать на страницу свою модель внутри действия контроллера.

NoMethodError at /
undefined method `page' for # Array

Там вам нужно напомнить себе о двух вещах, что коллекция, которую вы хотите разбивать на страницы, может быть Array или ActiveRecordRelation или, конечно, что-то еще.

Чтобы увидеть разницу, скажем, наша модель - это Продукт, и мы находимся внутри нашего действия index на products_controller.rb. Мы можем построить наш @products, если вы скажете одно из следующего:

@products = Product.all

или

@products = Product.where(title: 'title')

или smth else... и т.д.

В любом случае мы получаем ваши @products, , однако класс отличается.

@products = Product.all
@products.class
=> Array

и

@products = Product.where(title: 'title')
@products.class
=> Product::ActiveRecordRelation

Следовательно, в зависимости от класса коллекции, который мы готовы разбивать на страницы, Каминари предлагает:

@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]

Ответ 5

У меня была такая же ошибка. Обновил пакет обновления, а затем перезапустил сервер. Один из них зафиксировал это.