为了改变,我使用的是基于 Ramaze 和 Sequel 的应用程序,而不是 Rails 应用程序。
我有一个模型 Tag
,它通过连接表 :taggings
与 :posts
多对多关联,并且与 :external_posts
通过连接表 :external_post_taggings
。
我想将这两个关联收集在一起,并按日期字段对它们进行排序,该日期字段在每个表中称为 created_at
。
如果没有分页,我会这样做:
@combined = (@tag.posts + @tag.external_posts).sort_by(&:created_at).reverse
但是,我需要使用分页。如果只是 .posts 我会这样做:
@posts = @tag.posts.paginate(page, 10)
但我不知道如何跨两个表分页,如果可能的话。
最佳答案
假设您想要对标签和帖子的组合进行分页,您可能想要对两个关联数据集的并集进行分页:
@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 开始。
关于ruby - 我如何使用 Sequel::Model 对两个表进行分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946281/