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>
4

3 回答 3

47

尝试:

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

进而:

<%= paginate @posts %>
于 2012-06-26T03:31:14.423 回答
22

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

未定义的方法“total_pages”

或者

未定义的方法`current_page'

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

确保您始终调用page您将传递给的范围paginate

如果您有一个使用 Array 进行修饰的数组,这也适用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) %>
于 2015-04-30T06:10:54.833 回答
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

这对我有用。

请试一试。

于 2012-06-26T03:40:26.443 回答