2012-06-26 25 views
30

He buscado y buscado, pero nada resolvió mi problema. Aquí está mi controlador:Kaminari & Rails pagination - método indefinido `current_page '

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

Eso funciona bien, porque la vista del tema se reduce a dos mensajes. Sin embargo, cuando agrego esto a show.html.erb:

<%= paginate @topic.posts %> 

me dan este error:

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

Respuesta

45

Pruebe con:

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

Y luego:

<%= paginate @posts %> 
+0

Eso lo consiguió, me siento tonta ahora. ¡Gracias! – time

2

Hace algún tiempo, tuve un pequeño problema con kaminari que resolví mediante el uso de diferentes nombres de variables para cada acción.

Digamos que en la acción index se llama algo así como:

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

La vista index funciona bien con <%= paginate @topic %> sin embargo, si desea utilizar el mismo nombre de variable en cualquier otra acción, throu un error como ese .

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

Esto funcionó para mí.

Por favor, dar una oportunidad.

+0

(Sé que es viejo) Alguna idea sobre por qué esto podría pasar alguna vez? –

20

Si se producen errores de paginación en Kaminari como

undefined method `total_pages'

o

undefined method `current_page'

es probable porque el alcance AR que haya pasado en paginate no ha tenido el método page invocado.

¡Asegúrese de llamar siempre al page en los telescopios que pasará al paginate!

Esto también es válido si tiene una matriz que ha decorado usando Kaminari.paginate_array

malo:

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

bueno:

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

O con una matriz no-AR de su propio ...

Malo:

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

Una vez más, esto es bueno:

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