неопределенный метод `page 'для # <Array: 0xafd0660> - PullRequest
25 голосов
/ 04 августа 2011

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

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

Есть идеи?

Ответы [ 5 ]

37 голосов
/ 04 августа 2011

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

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

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

Kaminari.paginate_array([1, 2, 3]).page(2).per(1)
11 голосов
/ 19 февраля 2012

У Kaminari теперь есть метод разбивки на массивы, так что вы можете сделать что-то подобное в вашем контроллере:

myarray = Class.all
@results = Kaminari.paginate_array(myarray).page(params[:page])
3 голосов
/ 25 августа 2014

Когда вы получаете неопределенную страницу метода для 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]
1 голос
/ 10 декабря 2012

Я исправил проблему, вызвав крючки Каминари вручную.Добавьте эту строку для запуска в одном из ваших первых инициализаторов:

Kaminari::Hooks.init

Я разместил больше подробностей в другом ответе:

неопределенная страница метода для #каминари "страница" ошибка.rails_admin

0 голосов
/ 16 февраля 2012

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

...