作为改变,我使用的是Ramaze,因此Sequel,基于应用而不是Rails应用。
我有一个模型Tag,它通过连接表:taggings与:posts进行多对多的关联,通过连接表:external_post_taggings与:external_posts进行多对多的关联。
我希望将这两个关联收集在一起,并按日期字段进行排序,该字段在每个表中称为created_at。
如果没有分页,我会这样做:
@combined = (@tag.posts + @tag.external_posts).sort_by(&:created_at).reverse但是,我需要使用分页。如果仅仅是.posts,我会这样做:
@posts = @tag.posts.paginate(page, 10)但我不知道如何在两个表之间分页,如果这是可能的话。
发布于 2011-11-01 04:28:40
假设您希望对标签和帖子的组合进行分页,则可能需要对两个关联数据集的并集进行分页:
@tag.posts_dataset.
union(@tag.external_posts_dataset).
order(:created_at.desc).
paginate(page, 10)但是,除非posts和external_posts使用相同的模型类,否则这会有问题。如果它们使用不同的模型类,您可能需要手动跟踪每个模型类的偏移量。基本上,对于每个页面,为两个关联选择下10条记录(每个记录从适当的偏移量开始)。将两组10个数组组合成一个数组,按反转的created_at字段排序,取前10个结果。计算10个组合/排序记录数组中的帖子和外部帖子的数量,并相应地更新帖子和外部帖子的偏移量,以便在下一页使用。
例如,在第1页上,您将为两者都使用偏移量0。如果在合并、排序和获取前10个后,在10的数组中有7个柱子和3个外部柱子,则在第2页上,您将从7处开始柱子偏移,从3处开始外部柱子偏移。
https://stackoverflow.com/questions/7946281
复制相似问题