如何使用Kaminari(或will_paginate)gem对数组的散列进行分页

我现在设法找到了解决方法。 索引操作现在在调用页面之前有一个“order”子句,然后根据日期对膳食进行排序和分组。 hackey位下一步:@total_pages和@pages在视图中用于提供分页链接,因为内置帮助程序不能与@meals返回的Hash of arrays一起使用。 它有用(有点),但它是hackey。 将视图内容移动到帮助程序肯定有助于清理它,这是我的下一步。

def index @meals = Meal.order('date DESC').page(params[:page]).text_search(params[:query]).sort_by(&:date).reverse.group_by(&:date) @total_pages = (Meal.all.size / 7.to_f).ceil @pages = (1..@total_pages).to_a respond_to do |format| format.html # index.html.erb format.json { render json: @meals } end 

结束

我真的需要帮助 – 这让我疯了几天。 我试图分页数组的哈希。 我已经尝试过will_paginate和Kaminari,但找不到分页结果哈希的方法。

我正在运行Rails 3.2.6,Ruby 1.9.3和PostgreSQL 9.1.3正在进行搜索……

在我的控制器(并使用Kaminari)我有:

 def index @meals = Meal.text_search(params[:query]).sort_by(&:date).reverse.group_by(&:date).page(params[:page]) respond_to do |format| format.html # index.html.erb format.json { render json: @meals } end end 

在我的模型中,我有以下搜索:

 def self.text_search(query) if query.present? where("description @@ :q or meal_time @@ :q", q: query) else scoped end end 

在我的视图模板中:

 
"well form-search" do %> "span3" %> "btn" %>

'btn btn-success' %>

这将返回以下错误:

 NoMethodError in MealsController#index undefined method `page' for Hash 

任何帮助都会感激不尽!

 Kaminari.paginate_array(ARRAY_OBJECT).page(params[:page]).per(50) 

这是我的解决方案,经过一段时间的研究,如果你必须使用will_paginate(Kaminari更灵活,更容易使用)

  current_page = params[:page] || 1 per_page = params[:per_page] || 20 length = @data.length @data = WillPaginate::Collection.create(current_page, per_page, length) do |pager| pager.replace @data[pager.offset, pager.per_page].to_a end 

运行这些代码后,@ data将与具有will_paginate分页的ActiveRecord对象相同:

  • @data是一个哈希数组

  • <%= will_paginate(@data)%>是在视图中显示分页菜单的代码

希望这能帮助其他有同样问题的人。