Как добавить список элементов перед первоначальным списком записей, прежде чем вернуться из контроллера?
Как добавить список записей перед возвратом
Допустим, у меня есть индексный метод, определенный ниже. Индексное представление ожидает, что @songs перечислит все песни.
@top = TopChart.all
@songs = Song.order(created_at: :desc).page(params[:page]).per(20)
Теперь я хочу добавить @top записи перед @songs. например @songs = @top + @songs. После обновления списка этот способ также должен работать. Я ценю любую помощь! Спасибо!
1 ответ
Чтобы подкачка работала даже после добавления нескольких дополнительных записей, необходимо указать необходимое смещение при получении @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)