Допустим, N = 5, а ваша модель Message
, вы можете сделать что-то вроде этого:
Message.order(id: :asc).from(Message.all.order(id: :desc).limit(5), :messages)
Посмотрите на sql:
SELECT "messages".* FROM (
SELECT "messages".* FROM "messages" ORDER BY "messages"."created_at" DESC LIMIT 5
) messages ORDER BY "messages"."created_at" ASC
Ключ - это подвыбор. Сначала нам нужно определить, какие последние сообщения мы хотим, а затем мы должны упорядочить их в порядке возрастания.