2013-03-21 60 views
4

我有一個搜索模型,它構造了一個基本上是原始SQL的字符串。此字符串通過的find_by_sql呼叫運行,並且被返回到控制器上線5的下方(@ search.query < --query是返回的find_by_sql的結果的方法):儘管需要'will_paginate/array',但數組不會與will_paginate一起工作?

1 def roster_builder 
2 authorize! :access_roster_builder, current_coach 
3 @search = Search.new(sport: current_coach.primary_sport, conditions: params[:search]) 
4 
5 @athletes = @search.query.page(params[:page]).per_page(8) 
6 
7 if params[:refresh] 
8  render "athletes_refresh" 
9 else 
10  render "athletes" if request.format.js? 
11 end 
12 end 

這將返回一個數組,但我得到這個錯誤:

NoMethodError (undefined method `page' for #<Array:0x00000105b7add0>) 

所以,我發現其中插入以下應該解決這個問題:

require 'will_paginate/array' 

我試圖把在我的控制器,以及will_paginate.rb初始化文件無濟於事。我甚至在find_by_sql結果上完成了.to_a - 同樣的錯誤。究竟是什麼問題?我正在使用will_paginate版本3.0.4,所以它是完全最新的。在GitHub上,它甚至說,要求應該使這項工作很好:https://github.com/mislav/will_paginate/wiki/Backwards-incompatibility

回答

2

看到這個職位:https://github.com/mislav/will_paginate/issues/263

因此,對於您的控制器看起來會像這樣

def roster_builder 
    require 'will_paginate/array' 
    authorize! :access_roster_builder, current_coach 
    @search = Search.new(sport: current_coach.primary_sport, conditions: params[:search]) 

    # @athletes = @search.query.page(params[:page]).per_page(8) 
    @athletes = @search.query.paginate page: params[:page], per_page: 8 

    if params[:refresh] 
    render "athletes_refresh" 
    else 
    render "athletes" if request.format.js? 
    end 
end 
相關問題