Как получить последние N записей с помощью activerecord? - PullRequest
153 голосов
/ 07 января 2009

С :limit в запросе я получу первые N записей. Какой самый простой способ получить последние N записей?

Ответы [ 13 ]

0 голосов
/ 22 августа 2016

Допустим, 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

Ключ - это подвыбор. Сначала нам нужно определить, какие последние сообщения мы хотим, а затем мы должны упорядочить их в порядке возрастания.

0 голосов
/ 18 декабря 2014

Если у вас есть область по умолчанию в вашей модели, которая задает восходящий порядок в Rails 3, вам нужно будет использовать переупорядочение, а не порядок, как указано Артуром Невесом выше:

Something.limit(5).reorder('id desc')

или

Something.reorder('id desc').limit(5)
0 голосов
/ 07 января 2009

Добавить параметр запроса к запросу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...