如何在返回前预先添加记录列表
假设下面定义了index方法。索引视图期望@songs列出所有歌曲。
@top = TopChart.all
@songs = Song.order(created_at: :desc).page(params[:page]).per(20)现在我想在“歌曲”前面加上“顶级唱片”。例如“歌”=“顶”+“歌”。通过这种方式更新列表后,分页也应该可以工作。我很感激你的帮助!谢谢!
发布于 2018-05-05 05:03:30
为了使分页工作,即使在您准备了少量额外的记录之后,您必须在获取@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)
https://stackoverflow.com/questions/50185626
复制相似问题