С помощью :limit
запроса я получу первые N записей. Какой самый простой способ получить последние N записей?
163
С помощью :limit
запроса я получу первые N записей. Какой самый простой способ получить последние N записей?
Такой запрос активной записи, как я думаю, даст вам то, что вы хотите («Something» - название модели):
Something.find(:all, :order => "id desc", :limit => 5).reverse
редактировать : как отмечено в комментариях, другой способ:
result = Something.find(:all, :order => "id desc", :limit => 5)
while !result.empty?
puts result.pop
end
Это рельсы 3 пути
источник
SELECT "items".* FROM "items" ORDER BY id DESC LIMIT 50
SomeModel.last(5).class
==Array
. Правильный подход вSomeModel.limit(5).order('id desc')
соответствии с Артуром Невесом, что приводит кSELECT \"somemodels\".* FROM \"somemodels\" ORDER BY id desc LIMIT 5
новый способ сделать это в рельсах 3.1
SomeModel.limit(5).order('id desc')
источник
last(5)
потому, что он возвращает область для дальнейшего создания цепочки.SomeModel.limit(100).reverse_order
на Rails 4 ( guides.rubyonrails.org/… ) Это то же самое.SomeModel.limit(5).order('id desc').pluck(:col)
этоSELECT SomeModel.col FROM SomeModel ORDER BY id desc LIMIT 5
будет гораздо эффективнее, чем захват всех столбцов и отбрасывание всех столбцов, кроме одного, сSomeModel.last(5).map(&:col)
которымSELECT *
вместоSELECT col
(вы не можете извлечь после вызова последний; лениво-цепочка заканчивается на последнюю).Для Rails 5 (и, вероятно, Rails 4)
Плохой:
так как:
так:
вероятно, взорвет вашу память или навсегда.
Хороший подход:
так как:
Последнее является неоцененной областью применения. Вы можете связать его или преобразовать в массив через
.to_a
. Так:... занимает секунду.
источник
Для Rails 4 и выше:
Вы можете попробовать что-то вроде этого, если вы хотите первую самую старую запись
Вы можете попробовать что-то вроде этого, если вы хотите последние последние записи ..
источник
YourModel.all.order(id: :desc).limit(5)
" "
YourModel.all.order()
потому что это то же самое, чтоYourModel.order()
Решение здесь:
Поскольку rails является ленивым, он в конечном итоге попадет в базу данных с помощью SQL, например: «SELECT
table
. * FROMtable
ORDER BYtable
.id
DESC LIMIT 5».источник
SomeModel
SELECT
таблица таблицы.* FROM
ORDER BYtable
.id
DESC LIMIT 5` не выполняет выделение всехЕсли вам нужно установить порядок следования результатов, используйте:
если вам не нужно упорядочивать, а просто нужно сохранять записи в таблице, используйте:
источник
В моем
(rails 4.2)
проекте рельсов я используюи это работает.
источник
мы можем использовать
Model.last(5)
илиModel.limit(5).order(id: :desc)
в рельсах 5.2источник
Просто попробуй:
источник
Я считаю, что этот запрос лучше / быстрее для использования метода «срывать», который я люблю:
Это дает ActiveRecord в качестве вывода; так что вы можете использовать .pluck на нем так:
который быстро дает идентификаторы в виде массива при использовании оптимального кода SQL.
источник
Challenge.limit(5).order('id desc').ids
будет работать так же хорошо :)Если у вас есть область по умолчанию в вашей модели, которая задает восходящий порядок в Rails 3, вам нужно будет использовать переупорядочение, а не порядок, как указано Артуром Невесом выше:
или
источник
Допустим, N = 5 и ваша модель
Message
, вы можете сделать что-то вроде этого:Посмотрите на sql:
Ключ - это отбор. Сначала нам нужно определить, какие последние сообщения мы хотим, а затем мы должны упорядочить их в порядке возрастания.
источник
Добавьте параметр: order в запрос
источник