【问题标题】:Kaminari installed but apparently not seenKaminari 已安装但显然没有看到
【发布时间】:2022-07-11 19:26:53
【问题描述】:

rails 测试产生如下错误

ActionView::Template::Error: undefined method `total_pages' for nil:NilClass

        options[:total_pages] ||= scope.total_pages

对于视图中的这一特定行: <%= paginate @carts %>
控制器动作按照如下逻辑生成一个空数组

    if user?
      @carts = Cart.order(created_at: :desc).where([user_id = ?, current_user.id]).page params[:page]
    else
      @carts = []
    end

Kaminari 已捆绑

Using kaminari-core 1.2.2
Using kaminari-actionview 1.2.2
Using kaminari-activerecord 1.2.2
Using kaminari 1.2.2

puts @carts.size 确实在日志中显示 0。所以数组对象存在,但范围没有激活。 在这个特定的例子中,kaminari 的基本设置似乎没有起作用,而在另一种情况下, @users = User.page params[:page] 测试没有抱怨。

如何解决?

【问题讨论】:

    标签: ruby-on-rails pagination kaminari


    【解决方案1】:
    paginate []     # undefined method `total_pages' for []:Array
    paginate nil    # undefined method `total_pages' for nil:NilClass
    #        ^                                           ^
    # NOTE: from the error it looks like @carts is nil --'
    

    kaminari 需要一个 ActiveRecord 类或关系对象,并且必须在该类/对象上调用 page 方法,以便将其设置为 become "paginatable" 并确定作用域:

    paginate Cart             # => undefined method `total_pages' for Cart:Class
    paginate Cart.all         # => undefined method `total_pages' for #<ActiveRecord::Rel...
    
    paginate Cart.page(1)     # => <nav class="pagination" ...
    paginate Cart.all.page(1) # => <nav class="pagination" ...
    

    Kaminari 有一个帮助器对数组进行分页:

    @array = Kaminari.paginate_array([1,2,3]).page(1).per(10)
    
    paginate @array           # => <nav class="pagination" ...
    

    也可以使用空的 Cart 关系对象:

    paginate Cart.none.page   # => ""
    

    https://github.com/kaminari/kaminari#paginating-a-generic-array-object

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 2011-08-31
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多