Чтобы подкачка работала даже после добавления нескольких дополнительных записей, необходимо указать необходимое смещение при получении @songs
. Вам также нужно будет обработать первую страницу вашего запроса отдельно, где отображаются записи из @top
.
Вот пример кода:
page_size = 20
if params[:page] == 1
@top = TopChart.all
page_offset = 0
per_page = page_size - @top.size
else
@top = []
page_offset = page_size - TopChart.all.count
per_page = page_size
end
@songs = Song.offset(page_offset).order(created_at: :desc).page(params[:page]).per(per_page)
@songs = @top + @songs
В этом коде, если мы возвращаем первую страницу, смещение равно 0, но требуемый размер @songs
становится 20 минус размер @top
. Однако после первой страницы требуемый размер @songs
становится 20 со смещением количества песен, извлеченных на первой странице.
Обратите внимание, что существует предположение: размер @top
меньше размера страницы (в нашем примере - 20)