我有一个属于某个类别的视频列表。当有人转到视频的显示操作时,我希望该视频在列表中排在第一位,然后列出属于同一类别的所有其他视频,按名称排序。
我一直在想办法最好地描述这个问题,并得出结论,最好直观地解释我想要实现的目标。假设每个视频都有一个从 1 到 6 的 ID(为简单起见,删除排序)。如果 ID 参数为 4,我希望应用以下顺序:4-5-6-1-2-3
换句话说,列表需要环绕,直到所有视频都被列出。视频数量可能会发生变化,但可以在查询之前对视频数量进行计数。
我有一个属于某个类别的视频列表。当有人转到视频的显示操作时,我希望该视频在列表中排在第一位,然后列出属于同一类别的所有其他视频,按名称排序。
我一直在想办法最好地描述这个问题,并得出结论,最好直观地解释我想要实现的目标。假设每个视频都有一个从 1 到 6 的 ID(为简单起见,删除排序)。如果 ID 参数为 4,我希望应用以下顺序:4-5-6-1-2-3
换句话说,列表需要环绕,直到所有视频都被列出。视频数量可能会发生变化,但可以在查询之前对视频数量进行计数。
这似乎很容易:
在您的控制器中:
@video = Video.find(params[:id])
@similar_videos = @video.category.videos
在您看来:
= render @video
= render @similar_videos - @video
为此,您将不得不使用一些where
查询。我们@selectedvideo
以用户选择的视频为例。
然后:
@highervids = Video.where(
'category = ? AND id > ?',
@selectedvideo.category, @selectedvideo.id
).order("id DESC")
@lowervids = Video.where(
'category = ? AND id < ?',
@selectedvideo.category, @selectedvideo.id
).order("id DESC")
所以现在基本上所选视频之前的所有视频都在@lowervids
,之后的视频都在@highervids
,并且它们都是按降序排列的。您现在可以简单地渲染它们。