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

时间:2012-06-26 03:14:24

标签: ruby-on-rails ruby kaminari

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

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 个答案:

答案 0 :(得分:47)

尝试:

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

然后:

<%= paginate @posts %>

答案 1 :(得分:21)

如果您在Kaminari中遇到分页错误,请

  

未定义的方法`total_pages'

  

未定义的方法`current_page'

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

请务必在您将传递到page的范围内致电paginate

如果你有一个使用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) %>

答案 2 :(得分:3)

前段时间,我对kaminari有一点问题,我通过为每个动作使用不同的变量名来解决这个问题。

让我们在你所谓的index行动中说:

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

index视图适用于<%= paginate @topic %>但是如果您想在任何其他操作中使用相同的变量名称,则会发生类似的错误。

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

这对我有用。

拜托,试一试。