ruby - 我如何使用 Sequel::Model 对两个表进行分页?

标签 ruby pagination sequel

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

相关文章:

django - 如何让自定义分页类适用于 django Rest Framework v3.6

ruby - 带有表双下划线的 Sequel gem 限定查询列名

mysql - 跨多列的续集唯一验证

ruby-on-rails - rails to_xml/to_json 选项

ruby - 是否可以在葡萄 route 提供可选的 URL 参数

ruby-on-rails - Rails Admin - 上传 CSV 以创建模型实例

PHP - 获取页数

ruby-on-rails - 如何在 Windows 上完全卸载 ruby​​ on rails(使用 RailsInstaller 安装)?

php - CakePHP 分页导致奇怪的 DISTINCT 行为

ruby - 如何在我的续集类中定义我的表所有者/架构?