2013-03-21 4 views
4

У меня есть модель поиска, которая строит строку, которая в основном является сырым SQL. Эта строка проходит через вызов find_by_sql, и возвращается к контроллеру по линии-ниже (@ search.query < --query является метод, который возвращает результат find_by_sql):Array не работает с will_paginate, несмотря на требование 'will_paginate/array'?

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 бесполезен. Я даже сделал .to_a результат find_by_sql - ту же ошибку. Что конкретно здесь проблема? Я использую 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 
Смежные вопросы