2011-08-03 9 views

Odpowiedz

34

Brak tablicy nie ma metody strony.

Wygląda na to, że używasz kaminari. Class.all zwraca tablicę, więc nie możesz wywoływać na niej strony. Zamiast tego użyj bezpośrednio Class.page (1).

Dla normalnych tablic, Kaminari ma wielką metody pomocnika:

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

Dostaję niezainicjowanej stałą gdy próbuje odwoływać Kaminari –

+0

również stara Class.page (1) daje mi niezdefiniowaną metodę "strona" dla klasy: Klasa –

+0

Czy załadowałeś kaminari, dodając go do swojej Gemfile? –

0

Miałem ten sam błąd. Zrobiła aktualizację pakietu, a następnie zrestartowała serwer. Jeden z dwóch to naprawił.

10

Kaminari ma teraz metodę Stronicowanie tablic, więc można zrobić coś takiego w kontrolerze:

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

Otrzymuję niezdefiniowaną metodę "paginate_array" dla Kaminari: moduł jak to rozwiązać? –

+0

@ Saw Brzmi, jakbyś używał starszej wersji Kaminari. – DaveStephens

3

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] 
+0

Ładnie wyjaśniono :) .. dziękuję – inquisitive

Powiązane problemy