Я думаю, что поведение зависит от того, как вы обрабатываете переменную locations
после ее установки.Это связано с тем, что Location.order('id ASC').limit(10)
не запрашивает записи, а возвращает объект типа ActiveRecord::Relation
.Запрос будет выполнен только после того, как вы вызовете all
, first
, each
, map
и т. Д. Для этого объекта.
В моем тестировании
Location.order('id ASC').limit(10).map { |l| l.id }
возвращаетмассив из 10 идентификаторов, как и следовало ожидать.Но
Location.order('id ASC').limit(10).count
возвращает общее количество местоположений в базе данных, потому что он выполняет SQL
SELECT COUNT(*) FROM "locations" LIMIT 10
, который возвращает полное количество строк местоположений (ограничение на количествовозвращенные строки, а не само количество).
Поэтому, если вы обрабатываете результат Location.order('id ASC').limit(10)
как массив, перебирая его, вы должны получить тот же результат, как если бы вы добавили all
.Если вы звоните count
, вы не будете.Вроде неудачно, так как я думаю, что в идеале они должны вести себя одинаково, и вам не нужно знать, что вы имеете дело с ActiveRecord::Relation
вместо массива.