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卡米纳里
Using kaminari-core 1.2.2
Using kaminari-actionview 1.2.2
Using kaminari-activerecord 1.2.2
Using kaminari 1.2.2puts @carts.size确实在日志记录中显示了0。因此,数组对象存在,但作用域没有激活。似乎kaminari的基本设置在这个特定的实例中没有启动,而在另一种情况下,@users = User.page params[:page]测试没有抱怨。
这是怎么解决的?
发布于 2022-07-11 11:26:53
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方法,以使其成为成为“分页的”,并使作用域生效:
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" ...还可以使用空购物车关系对象:
paginate Cart.none.page # => ""https://github.com/kaminari/kaminari#paginating-a-generic-array-object
https://stackoverflow.com/questions/72936219
复制相似问题