---
title: "Random Pagination"
author: "Yaroslav Shmarov"
date: "2025-02-12"
canonical_url: "https://blog.superails.com/random-pagination"
markdown_url: "https://blog.superails.com/random-pagination.md"
description: "Sometimes you want to display records in a random order, but also paginate them. order(\"RANDOM()\") can return duplicates on next pages."
tags: ["pagination","pagy"]
license: "GNU AGPL v3. Credit Yaroslav Shmarov and link the canonical URL."
---

# Random Pagination

Sometimes you want to display records in a random order, but also paginate them.

`order("RANDOM()")` can return duplicates on next pages.

My solution is to set a random seed, and then order by a random value set with that seed.

```ruby
  def index
    cookies[:seed] ||= SecureRandom.random_number
    @posts = Post.order(Arel.sql("random()")).from("(SELECT setseed(#{cookies[:seed]})) as seed_setup, posts")
    @pagy, @posts = pagy_countless(@posts, items: 24)
  end
```

This will return a random order of posts, and the same order on each page.
