如何在返回前添加记录列表
让我们说我有索引方法定义如下。索引视图要求@songs列出所有歌曲。
@top = TopChart.all
@songs = Song.order(created_at: :desc).page(params[:page]).per(20)
现在我想在@songs前面添加@top记录。例如@songs = @top + @songs。以这种方式更新列表后,分页也应该有效。我感谢任何帮助!谢谢!
答案 0 :(得分: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
在此代码中,如果我们返回第一页,则offset为0,但@songs
的所需大小为20减去@top
的大小。但是,在第一页之后,所需的@songs
大小变为20,并且首页中提取的歌曲数量会有所偏移。
请注意,有一个假设: @top
的大小小于页面大小(本例中为20)