2012-06-26 13 views
30

Ich suchte und suchte, aber nichts löste mein Problem. Hier ist meine Steuerung:Kaminari & Rails Paginierung - undefined Methode `current_page '

def show 
    @topic = Topic.find(params[:id]) 
    @topic.posts = @topic.posts.page(params[:page]).per(2) # 2 for debugging 
end 

Das funktioniert gut, weil die Themenansicht auf zwei Beiträge reduziert ist. Allerdings, wenn ich hinzufügen, dies show.html.erb:

<%= paginate @topic.posts %> 

ich diesen Fehler gegeben:

undefined method `current_page' for #<ActiveRecord::Relation:0x69041c9b2d58> 

Antwort

45

Versuchen mit:

def show 
    @topic = Topic.find(params[:id]) 
    @posts = @topic.posts.page(params[:page]).per(2) 
end 

Und dann:

<%= paginate @posts %> 
+0

Das wird es, ich fühle mich jetzt dumm. Vielen Dank! – time

2

Vor einiger Zeit hatte ich ein kleines Problem mit Kaminari, dass ich gelöst habe indem Sie für jede Aktion verschiedene Variablennamen verwenden.

die in der index Aktion Sagen sie rufen Sie so etwas wie:

def index 
    @topic = Topic.all.page(params[:page]) 
end 

Die index Ansicht arbeitet mit <%= paginate @topic %> jedoch in Ordnung, wenn Sie möchten, wie das die gleichen Variablennamen in irgendeiner anderen Aktion, es throu einen Fehler verwenden, .

def list 
    # don't use @topic again. choose any other variable name here 
    @topic_list = Topic.where(...).page(params[:page]) 
end 

Das funktionierte für mich.

Bitte geben Sie eine Einstellung.

+0

(Ich weiß, es ist alt) Irgendeine Idee, warum das jemals passieren könnte? –

20

Wenn Sie erhalten Paginierung Fehler in Kaminari wie

undefined method `total_pages'

oder

undefined method `current_page'

es ist wahrscheinlich, weil die AR-Bereich, den Sie in paginate bestanden habe, hat die page Methode nannte es nicht hatte.

Stellen Sie sicher, dass Sie immer page auf den Bereichen anrufen, die Sie in paginate übergeben werden!

Dies gilt auch, wenn Sie ein Array haben, die Sie eingerichtet haben mit Kaminari.paginate_array

Bad:

<% scope = Article.all # You forgot to call page :( %> 
<%= paginate(scope)  # Undefined methods...  %> 

Gut:

<% scope = Article.all.page(params[:page]) %> 
<%= paginate(scope) %> 

oder mit einem nicht-AR-Array Ihrer eigenes ...

Schlecht:

<% data = Kaminari.paginate_array(my_array) # You forgot to call page :(  %> 
<%= paginate(data)       # Undefined methods...  %> 

Auch dies ist gut:

<% data = Kaminari.paginate_array(my_array).page(params[:page]) %> 
<%= paginate(data) %> 
Verwandte Themen