【问题标题】:How can I paginate across two tables using Sequel::Model?如何使用 Sequel::Model 跨两个表分页?
【发布时间】:2020-02-10 06:42:46
【问题描述】:

为了改变,我使用的是基于 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)

但如果可能的话,我不知道如何跨两个表进行分页。

【问题讨论】:

    标签: ruby pagination sequel


    【解决方案1】:

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

    @tag.posts_dataset.
      union(@tag.external_posts_dataset).
      order(:created_at.desc).
      paginate(page, 10)
    

    但是,除非帖子和 external_posts 使用相同的模型类,否则这会出现问题。如果他们使用单独的模型类,您可能必须手动跟踪每个模型类的偏移量。基本上,对于每个页面,为两个关联选择接下来的 10 条记录(从适当的偏移量开始)。将2组10个组合成一个数组,按反向created_at字段排序,取前10个结果。计算 10 条组合/排序记录的数组中的帖子和外部帖子的数量,并相应地更新帖子和外部帖子的偏移量,以便在下一页使用。

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

    【讨论】:

    • 是的,它们是两个不同的模型类。所以我必须一次一个地浏览页面,跟踪偏移量,直到我到达我想要的页面?哎呀,听起来很复杂 :) 我认为你是对的。
    猜你喜欢
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    相关资源
    最近更新 更多