В моем последнем проекте я столкнулся с проблемой, мне пришлось разбить на страницы несколько моделей с одной нумерацией страниц в моей функциональности поиска. он должен работать таким образом, чтобы первая модель отображалась первой, когда результаты первой модели, вторая модель должны продолжать результаты, а третья и т. д. в виде единого поискового канала, как каналы Facebook. это функция, которую я создал, чтобы сделать эту функцию
def multi_paginate(models, page, per_page)
WillPaginate::Collection.create(page, per_page) do |pager|
# set total entries
pager.total_entries = 0
counts = [0]
offsets = []
for model in models
pager.total_entries += model.count
counts << model.count
offset = pager.offset-(offsets[-1] || 0)
offset = offset>model.count ? model.count : offset
offsets << (offset<0 ? 0 : offset)
end
result = []
for i in 0...models.count
result += models[i].limit(pager.per_page-result.length).offset(offsets[i]).to_a
end
pager.replace(result)
end
end
попробуйте и дайте мне знать, если у вас есть какие-либо проблемы с этим, я также опубликовал это как проблему в репозиторий will_paginate, если все подтвердят, что он работает правильно, я раскошелюсь и передам его в библиотеку. https://github.com/mislav/will_paginate/issues/351