2012-06-26 18 views
30

Ho cercato e cercato, ma niente ha risolto il mio problema. Ecco il mio controller:Impaginazione Kaminari & Rails - metodo non definito `current_page '

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

Questo funziona bene, perché la vista dell'argomento è ridotta a due post. Tuttavia, quando aggiungo questo per show.html.erb:

<%= paginate @topic.posts %> 

mi sono dato questo errore:

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

risposta

45

Prova con:

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

E poi:

<%= paginate @posts %> 
+0

che ha ottenuto, mi sento stupido ora. Grazie! – time

2

Qualche tempo fa, ho avuto un piccolo problema con kaminari che ho risolto utilizzando diversi nomi di variabili per ogni azione.

Diciamo nell'azione index si chiama qualcosa come:

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

Il index vista funziona bene con <%= paginate @topic %> se si desidera utilizzare lo stesso nome di variabile in qualsiasi altra azione, cittadi un errore del genere .

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

Questo ha funzionato per me.

Per favore, dai uno scatto.

+0

(so che è vecchio) Qualche idea sul perché questo potrebbe mai accadere? –

20

Se vengono segnalati errori di impaginazione in Kaminari come

undefined method `total_pages'

o

undefined method `current_page'

è probabile perché la portata AR aver superato in paginate non ha avuto il metodo page chiamato su di esso.

Assicurati di chiamare sempre page sugli ambiti che passerai a paginate!

Questo vale anche se si dispone di un array che si è decorato con Kaminari.paginate_array

Bad:

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

Buono:

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

O con una matrice non-AR del proprio ...

Difetto:

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

Ancora una volta, questo è buono:

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