Ruby on rails Kaminari:自定义模型的分页

Ruby on rails Kaminari:自定义模型的分页,ruby-on-rails,activerecord,pagination,kaminari,Ruby On Rails,Activerecord,Pagination,Kaminari,我有一个自定义模型(不通过数据库下的任何表进行映射)。此自定义模型只是合并许多其他表数据的结果。我想用kaminari来做这个 例如: def index @custom_models = find_all_items # result is an array render end 然后我对视图中的项目进行分页: = paginate @custom_models 运行此操作时,我遇到异常: 数组的未定义方法“总页数”:0x007fb4dde63c70 我的问题是:如何将Ka

我有一个自定义模型(不通过数据库下的任何表进行映射)。此自定义模型只是合并许多其他表数据的结果。我想用kaminari来做这个

例如:

def index
   @custom_models = find_all_items # result is an array
   render
end
然后我对视图中的项目进行分页:

  = paginate @custom_models
运行此操作时,我遇到异常:

数组的未定义方法“总页数”:0x007fb4dde63c70

我的问题是:如何将Kaminari用于自定义模型文件

@编辑 我现在可以用Kaminari了,只要用这句话:

  @custom_models = Kaminari.paginate_array(@custom_models)
                  .page(params[:page]).per(params[:per_page])
但现在我遇到了一个问题:因为这是自定义模型,所以我使用自定义查询。我使用原始sql查询并使用
offset
limit
关键字进行分页

例如,我返回25条记录,Kaminari的默认值是每页显示25条记录,所以我只能看到1页。我可以查询返回全部必要记录(例如1000条记录),但我不知道如何让Kaminari理解这一点并显示足够的页面


谢谢

首先,我假定
获取所有项目
是一个数组

您可以在控制器上插入分页,但这意味着数据库将加载整个集合,然后使用数组分页方法过滤结果

@custom_models =  Kaminari.paginate_array(fetch_all_items).page(params[:page])
但我认为最好的方法是控制模型中的偏移/限制(分页)。为了向您展示如何做到这一点,让生成
获取所有\u项的代码
会很有帮助

您可以在中找到更多信息

更新-黑客

所以,现在我们看的是另一件事。不是100%确定这就足够了,但如果您想在模型中进行激进和分页,这应该是一条路:

在你的模型中,你应该有这样的东西(当然,你会有这样的东西来适应你的需要):

那么,在控制器中,您应该具有:

@custom_model = fetch_all_items(params[:page].to_i, params[:per_page].to_i) # cast to integer to avoid injections and misfunctions

除了
:total\u pages,:current\u pages
,Kaminari可能还需要一些其他变量,比如
next\u pages
prev\u pages
,我不知道。使用相同的块,
items.class.module\u eval
注入它们。

我已经尝试了您的选项。但我在名为“
未定义的方法”total_pages”的视图文件中遇到异常,该方法用于#数组:0x007fb4daca5288
。关于分页,我自己对查询进行分页(使用offset和limit关键字)。如果在模型中进行分页,则可能还需要手动计算页数。请更新您的问题,在代码方面,在模型和控制器级别,我已经更新了我的问题。请看一看。谢谢大家。。。这真是令人讨厌。。。我发布了一个最新的答案,对此我并不感到骄傲:)谢谢。工作原理:D我看很好:D有时我们必须找到一个解决方案:D非常感谢:D
@custom_model = fetch_all_items(params[:page].to_i, params[:per_page].to_i) # cast to integer to avoid injections and misfunctions