Ruby 如何使用Sequel::Model在两个表之间分页?

Ruby 如何使用Sequel::Model在两个表之间分页?,ruby,pagination,sequel,Ruby,Pagination,Sequel,作为一个改变,我使用了一个基于Ramaze的应用程序,因此是基于Sequel的应用程序,而不是Rails应用程序 我有一个模型标签,它通过连接表:标签,与:外部标签通过连接表:外部标签多对多关联 我想收集这两个关联,并按日期字段对它们进行排序,该字段在每个表中称为created_at 如果不分页,我将执行以下操作: @combined = (@tag.posts + @tag.external_posts).sort_by(&:created_at).reverse @posts =

作为一个改变,我使用了一个基于Ramaze的应用程序,因此是基于Sequel的应用程序,而不是Rails应用程序

我有一个模型
标签
,它通过连接表
:标签
,与
:外部标签
通过连接表
:外部标签
多对多关联

我想收集这两个关联,并按日期字段对它们进行排序,该字段在每个表中称为
created_at

如果不分页,我将执行以下操作:

@combined = (@tag.posts + @tag.external_posts).sort_by(&:created_at).reverse
@posts = @tag.posts.paginate(page, 10)
但是,我需要使用分页。如果只是。我会:

@combined = (@tag.posts + @tag.external_posts).sort_by(&:created_at).reverse
@posts = @tag.posts.paginate(page, 10)

但是如果可能的话,我不知道如何在两个表之间分页。

假设您想要对标记和帖子的组合进行分页,那么您可能想要对两个关联数据集的并集进行分页:

@tag.posts_dataset.
  union(@tag.external_posts_dataset).
  order(:created_at.desc).
  paginate(page, 10)
但是,这会有问题,除非POST和外部_POST使用相同的模型类。如果它们使用单独的模型类,则可能必须手动跟踪每个模型类的偏移。基本上,对于每个页面,为两个关联选择接下来的10条记录(从适当的偏移量开始)。将两组10人组合成一个数组,按反向创建的_at字段对其排序,取前10个结果。计算包含10条合并/排序记录的数组中的帖子和外部帖子的数量,并相应地更新帖子和外部帖子的偏移量,以便在下一页中使用


例如,在第1页上,两个都使用偏移量0。如果在合并、排序并取前10个后,10个数组中有7个帖子和3个外部帖子,那么在第2页上,您可以将帖子偏移量从7开始,外部帖子偏移量从3开始。

是的,它们是两个不同的模型类。所以我必须一次一页地浏览页面,跟踪偏移量,直到找到我想要的页面?哎呀,听起来很复杂:)不过我觉得你是对的。