Kaminari和Rails分页 - 未定义的方法'current_page'

31

我搜索了很久,但仍然无法解决我的问题。这是我的控制器:

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

那个功能运行良好,因为主题视图被缩减为两篇帖子。但是,当我将它添加到 show.html.erb 中时:

<%= paginate @topic.posts %>

我遇到了这个错误:

undefined method `current_page' for #<ActiveRecord::Relation:0x69041c9b2d58>
3个回答

47

尝试使用以下代码:

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

然后:

<%= paginate @posts %>

22
如果在Kaminari中出现了分页错误,如未定义方法`total_pages`或`current_page`,那很可能是因为你将AR作用域传递给`paginate`时没有调用`page`方法。
请确保始终在要传递给`paginate`的作用域上调用`page`!
如果你使用`Kaminari.paginate_array`装饰数组,也是如此。
不好的写法:
<% scope = Article.all    # You forgot to call page :(  %>
<%= paginate(scope)       # Undefined methods...        %>

好:

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

或者使用您自己的非AR数组...

不好的:

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

再说一遍,这很不错:

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

3

不久之前,我在使用kaminari时遇到了一些小问题,通过为每个操作使用不同的变量名称解决了这个问题。

比如,在index操作中,你可以这样调用:

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

使用<%= paginate @topic %>语句,index视图可以正常工作。但是如果你想在其他操作中使用同样的变量名,它会抛出错误。

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

这对我有用。

请尝试一下。


1
(我知道这很老)你有任何想法为什么会发生这种情况吗? - Pavel Bulanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接