3

为了改变,我使用的是基于 Ramaze 的应用程序,因此是基于 Sequel 的应用程序,而不是 Rails 应用程序。

我有一个模型,它与via a join table和via a join tableTag多对多关联。:posts:taggings: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)

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

4

1 回答 1

4

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

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

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

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

于 2011-10-31T20:28:40.477 回答