Gdy dojdziesz niezdefiniowanej stronę metoda na tablicy, prawdopodobnie używasz kaminari Klejnot i próbujesz utworzyć paginację swojego Modelu w akcji kontrolera.
NoMethodError at/
undefined method `page' for # Array
Nie trzeba przypominać siebie dwóch rzeczy, że zbiór jesteś gotów paginate może być Array lub ActiveRecordRelation lub oczywiście coś innego.
Aby zobaczyć różnicę, powiedzmy, że nasz model jest produkt i jesteśmy wewnątrz naszego indeksu działania na products_controller.rb. Możemy skonstruować nasze @products z powiedzmy jedną z następujących czynności:
@products = Product.all
lub
@products = Product.where(title: 'title')
lub smth indziej ... itd
Albo sposób otrzymujemy Twój @products, jednak klasa jest inna.
@products = Product.all
@products.class
=> Array
i
@products = Product.where(title: 'title')
@products.class
=> Product::ActiveRecordRelation
Dlatego w zależności od klasy kolekcji jesteśmy gotowi paginate Kaminari oferuje:
@products = Product.where(title: 'title').page(page).per(per)
@products = Kaminari.paginate_array(Product.all).page(page).per(per)
Aby podsumować nieco , dobry sposób na dodawanie stronicowania do modelu:
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
i wewnątrz modelu chcesz paginate (product.rb):
paginates_per 5
# Constants
PAGINATION_OPTIONS = [5, 10, 15, 20]
Dostaję niezainicjowanej stałą gdy próbuje odwoływać Kaminari –
również stara Class.page (1) daje mi niezdefiniowaną metodę "strona" dla klasy: Klasa –
Czy załadowałeś kaminari, dodając go do swojej Gemfile? –