对于更改,我使用的是Ramaze,因此使用基于Sequel的应用而不是Rails应用。
我有一个模型Tag
,它通过连接表:posts
与:taggings
相关联,并通过连接表{{1}与:external_posts
相关联}}
我想一起收集这两个关联,并按日期字段排序,在每个表中称为:external_post_taggings
。
没有分页,我会这样做:
created_at
但是,我需要使用分页。如果它只是.posts我会这样做:
@combined = (@tag.posts + @tag.external_posts).sort_by(&:created_at).reverse
但我不知道如何对两个表进行分页,如果可能的话。
答案 0 :(得分:4)
假设您想要对标签和帖子的组合进行分页,您可能希望对两个关联数据集的并集进行分页:
@tag.posts_dataset.
union(@tag.external_posts_dataset).
order(:created_at.desc).
paginate(page, 10)
但是,除非posts和external_posts使用相同的模型类,否则这有问题。如果他们使用单独的模型类,您可能必须手动跟踪每个模型类的偏移量。基本上,对于每个页面,为两个关联选择接下来的10个记录(以适当的偏移量开始每个记录)。将2组10组合成一个数组,按反转的created_at字段对其进行排序,得到前10个结果。计算该10个组合/排序记录数组中的帖子和外部帖子的数量,并相应地更新帖子和外部帖子的偏移量,以便在下一页上使用。
例如,在第1页上,您将使用偏移量0。如果在组合,排序和前10个之后,10个数组中有7个帖子和3个外部帖子,在第2页上你将开始偏移7的帖子,外部帖子偏移3。