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

tim*_*ime 31 ruby ruby-on-rails kaminari

我搜索和搜索,但没有解决我的问题.这是我的控制器:

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

功能很好,因为主题视图减少到两个帖子.但是,当我将此添加到show.html.erb时:

<%= paginate @topic.posts %>
Run Code Online (Sandbox Code Playgroud)

我给出了这个错误:

undefined method `current_page' for #<ActiveRecord::Relation:0x69041c9b2d58>
Run Code Online (Sandbox Code Playgroud)

Nic*_*nil 47

试试:

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

然后:

<%= paginate @posts %>
Run Code Online (Sandbox Code Playgroud)


Dar*_*cks 22

如果你在Kaminari中遇到分页错误

未定义的方法`total_pages'

要么

未定义的方法`current_page'

这可能是因为您传入的AR范围paginate没有page调用它的方法.

确保你总是打电话给page你将要传入的范围paginate!

如果您使用了已装饰的数组,这也适用 Kaminari.paginate_array

坏:

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

好:

<% scope = Article.all.page(params[:page]) %>
<%= paginate(scope) %>
Run Code Online (Sandbox Code Playgroud)

或者使用您自己的非AR阵列......

坏:

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

再次,这很好:

<% data = Kaminari.paginate_array(my_array).page(params[:page]) %>
<%= paginate(data) %>
Run Code Online (Sandbox Code Playgroud)