Похоже, что will_paginate налагает свое собственное предложение limit
на ваши отношения для выполнения подкачки.После некоторых экспериментов самый простой способ, который я смог найти, - это быстро загрузить набор результатов и использовать функциональность, содержащуюся в расширениях массива , для фактической нумерации страниц.
Вот быстрый пример;обратите внимание, что вы должны потребовать will_paginate/array
;Вы можете сделать это в инициализаторе или в другом месте.Обратите внимание, что для получения метода paginate
используется monkey-patch Array
.
require 'will_paginate/array'
class ArticlesController < ApplicationController
def index
@articles = Article.published.limit(20).all # call `all` to eager load
@articles = @articles.paginate(:page => params[:page], :per_page => 10)
end
end
[Обновить]
Другой вариант - передать total_entires
опция will_paginate в зависимости от размера набора результатов.
class ArticlesController < ApplicationController
def index
@articles = Article.published.limit(20)
@articles = @articles.paginate(:page => params[:page], :per_page => 10, :total_entries => @articles.count)
end
end
Вы не можете передать 20, поскольку не можете гарантировать, что будут возвращены полные 20 результатов;передав атрибут count
, вы можете убедиться в правильности нумерации страниц.