【问题标题】:Kaminari & Rails pagination - undefined method `current_page'Kaminari 和 Rails 分页 - 未定义的方法“current_page”
【发布时间】:2012-06-27 08:34:51
【问题描述】:

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

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>

【问题讨论】:

    标签: ruby-on-rails ruby kaminari


    【解决方案1】:

    尝试:

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

    然后:

    <%= paginate @posts %>
    

    【讨论】:

      【解决方案2】:

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

      未定义的方法`total_pages'

      未定义的方法`current_page'

      这可能是因为您传递给 paginate 的 AR 范围没有调用 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
        

        index 视图可以与&lt;%= paginate @topic %&gt; 一起正常工作,但是如果您想在任何其他操作中使用相同的变量名,则会出现这样的错误。

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

        这对我有用。

        请试一试。

        【讨论】:

        • (我知道它很旧)知道为什么会发生这种情况吗?
        猜你喜欢
        • 2012-10-24
        • 2011-10-18
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 2014-02-23
        • 1970-01-01
        • 1970-01-01
        • 2016-07-04
        相关资源
        最近更新 更多