ruby-on-rails - traitor - rails will_paginate per page
Paginación de Kaminari y Rails-método indefinido `current_page '' (3)
Busqué y busqué, pero nada resolvió mi problema. Aquí está mi controlador:
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 publicaciones. Sin embargo, cuando agrego esto a show.html.erb:
<%= paginate @topic.posts %>
Me han dado este error:
undefined method `current_page'' for #<ActiveRecord::Relation:0x69041c9b2d58>
Hace algún tiempo, tuve un pequeño problema con kaminari que resolví usando diferentes nombres de variables para cada acción.
Digamos que en la acción de index
llamamos algo así como:
def index
@topic = Topic.all.page(params[:page])
end
La vista de index
funciona bien con <%= paginate @topic %>
sin embargo, si desea usar el mismo nombre de variable en cualquier otra acción, se produce 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, dale una oportunidad.
Prueba con:
def show
@topic = Topic.find(params[:id])
@posts = @topic.posts.page(params[:page]).per(2)
end
Y entonces:
<%= paginate @posts %>
Si obtienes errores de paginación en Kaminari como
método indefinido `total_pages ''
o
método indefinido `current_page ''
es probable porque el alcance de AR que ha pasado a paginate
no ha tenido el método de page
llamado.
¡Asegúrese de llamar siempre a la page
en los ámbitos que pasará para paginate
!
Esto también es válido si tiene una matriz que ha decorado utilizando 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 propia ...
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) %>