4

基本的に生のSQLである文字列を構築する検索モデルがあります。この文字列はfind_by_sql呼び出しを介して実行され、以下の5行目でコントローラーに返されます(@ search.query <-queryは、find_by_sqlの結果を返すメソッドです)。

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では、requireがこれを正常に機能させる必要があるとさえ言っています:https ://github.com/mislav/will_paginate/wiki/Backwards-incompatibility

4

1 に答える 1

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
于 2013-03-21T19:37:11.890 に答える