2015-06-23 118 views
1

我正在尝试使用will_paginatefilterrific一起使用。但我发现了以下错误:will_paginate&filterrific:undefined method#total_pages'for#<Array:0x007f9f6b4a3320>

undefined method `total_pages' for # Array:0x007f9f6b4a3320>

我的控制器动作:

def index 
    @filterrific = initialize_filterrific(
     current_user.assessments, 
     params[:filterrific], 
     :select_options => { 
     sorted_by: Assessment.options_for_sorted_by  }, 
     :persistence_id => false, 
    ) or return 
    @assessments = @filterrific.find.page(params[:page]).paginate(page: params[:page], per_page: 10).sort_by &:created_at 
    @assessments.reverse! 
    end 

查看:

<%= render(
    partial: 'list', 
    locals: { assessments: @assessments } 
) %> 

</div> 

部分:

<div id="filterrific_results"> 



    <% @assessments.each do |assessment| %> 
    .... 
    <% end %> 

</div> 


<%= will_paginate assessments %> 

我要去哪里错了?

+0

尝试添加一个新的文件,以配置/ initilizers和加入这一行'需要“will_paginate/array'' – Pavan

回答

0

避免在分页集合中调用sort_by。将范围添加到评估并指定filterrific的范围。

asessment.rb 
class Assessment < ActiveRecord::Base 
    filterrific(
     available_filters: [ 
     :oldest_first 
     ] 
    ) 
    scope :oldest_first, lambda { order('created_at ASC') } 
+0

好感谢,但仍然不能解决问题 –

1

的问题是,你是铸造一个ActiveRecord集合代理到一个数组有以下两种方法:

  • .sort_by
  • .reverse

确保设置的顺序使用ActiveRecord方法。这应该工作:.order('created_at DESC')

您也在调用分页方法两次:.page.paginate。一旦应该就够了。

0

这是因为您同时调用了“.page”和“.paginate”。我可以用下面的代码。我知道你已经解决了这个问题,因为这个问题是最近两年发布的,但我只是分享了我的经验,以便在稍后面对这个问题的朋友。

@filterrific.find.page(params[:page]).per_page(10) 
相关问题