J'ai cherché et cherché, mais rien n'a résolu mon problème. Voici mon contrôleur:
def show
@topic = Topic.find(params[:id])
@topic.posts = @topic.posts.page(params[:page]).per(2) # 2 for debugging
end
Cela fonctionne très bien, car la vue du sujet est réduite à deux messages. Cependant, lorsque j'ajoute ceci à show.html.erb:
<%= paginate @topic.posts %>
Je reçois cette erreur:
undefined method `current_page' for #<ActiveRecord::Relation:0x69041c9b2d58>
Essayez avec:
def show
@topic = Topic.find(params[:id])
@posts = @topic.posts.page(params[:page]).per(2)
end
Puis:
<%= paginate @posts %>
Si vous obtenez des erreurs de pagination dans Kaminari comme
méthode non définie `total_pages '
ou
méthode non définie `current_page '
c'est probablement parce que la portée AR que vous avez passée dans paginate
n'a pas fait appel à la méthode page
.
Assurez-vous de toujours appeler page
sur les étendues que vous allez transmettre à paginate
!
Cela s'applique également si vous disposez d'un tableau que vous avez décoré à l'aide de Kaminari.paginate_array
Mauvais:
<% scope = Article.all # You forgot to call page :( %>
<%= paginate(scope) # Undefined methods... %>
Bien:
<% scope = Article.all.page(params[:page]) %>
<%= paginate(scope) %>
Ou avec un tableau non AR de votre choix ...
Mauvais:
<% data = Kaminari.paginate_array(my_array) # You forgot to call page :( %>
<%= paginate(data) # Undefined methods... %>
Encore une fois, c'est bien:
<% data = Kaminari.paginate_array(my_array).page(params[:page]) %>
<%= paginate(data) %>
Il y a quelque temps, j'ai eu un petit problème avec kaminari que j'ai résolu en utilisant différents noms de variables pour chaque action.
Disons que dans l'action index
vous appelez quelque chose comme:
def index
@topic = Topic.all.page(params[:page])
end
La vue index
fonctionne bien avec <%= paginate @topic %>
cependant si vous voulez utiliser le même nom de variable dans n'importe quelle autre action, cela génère une erreur comme celle-ci.
def list
# don't use @topic again. choose any other variable name here
@topic_list = Topic.where(...).page(params[:page])
end
Cela a fonctionné pour moi.
S'il vous plaît, essayez.