首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kaminari已安装,但显然未见

Kaminari已安装,但显然未见
EN

Stack Overflow用户
提问于 2022-07-11 09:18:35
回答 1查看 44关注 0票数 1

rails测试正在生成错误,如下所示

代码语言:javascript
复制
ActionView::Template::Error: undefined method `total_pages' for nil:NilClass

        options[:total_pages] ||= scope.total_pages

对于视图中的这一行:<%= paginate @carts %>

控制器操作根据以下逻辑生成空数组

代码语言:javascript
复制
    if user?
      @carts = Cart.order(created_at: :desc).where([user_id = ?, current_user.id]).page params[:page]
    else
      @carts = []
    end

卡米纳里

代码语言:javascript
复制
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]测试没有抱怨。

这是怎么解决的?

EN

回答 1

Stack Overflow用户

发布于 2022-07-11 11:26:53

代码语言:javascript
复制
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方法,以使其成为成为“分页的”,并使作用域生效:

代码语言:javascript
复制
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有一个助手可以对数组进行分页:

代码语言:javascript
复制
@array = Kaminari.paginate_array([1,2,3]).page(1).per(10)

paginate @array           # => <nav class="pagination" ...

还可以使用空购物车关系对象:

代码语言:javascript
复制
paginate Cart.none.page   # => ""

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72936219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档