Я не могу пройти мимо этого. Я знаю, что я читал, что не существует метода страниц для массивов, но что мне делать?
Если я запустил Class.all в консоли, он вернет #, но если я запустим Class.all.page(1), я получаю вышеуказанную ошибку.
Любые идеи?
Я не могу пройти мимо этого. Я знаю, что я читал, что не существует метода страниц для массивов, но что мне делать?
Если я запустил Class.all в консоли, он вернет #, но если я запустим Class.all.page(1), я получаю вышеуказанную ошибку.
Любые идеи?
Нет Массив не имеет метода страницы.
Похоже, вы используете kaminari. Class.all возвращает массив, поэтому вы не можете вызвать страницу на нем. Вместо этого используйте Class.page(1) напрямую.
Для нормальных массивов каминари имеет отличный вспомогательный метод:
Kaminari.paginate_array([1, 2, 3]).page(2).per(1)
В Kaminari теперь есть метод для разбиения на страницы массивов, поэтому вы можете сделать что-то подобное в своем контроллере:
myarray = Class.all
@results = Kaminari.paginate_array(myarray).page(params[:page])
Когда вы получаете страницу метода 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]
Я исправил проблему, вызвав крючки Kaminari вручную. Добавьте эту строку для запуска в одном из первых инициализаторов:
Kaminari::Hooks.init
Я отправил более подробную информацию в другой ответ:
undefined страница метода для # < Array: 0xc347540 > kaminari "страница" ошибка. rails_admin
У меня была такая же ошибка. Обновил пакет обновления, а затем перезапустил сервер. Один из них зафиксировал это.