Datamapper запустит только один sql-запрос для приведенного выше примера, поэтому ему придется хранить весь набор результатов в памяти.
Я думаю, что вы должны использовать какую-то нумерацию страниц, если ваша коллекция большая.Используя dm-pagination , вы можете сделать что-то вроде:
PAGE_SIZE = 20
pager = Author.page(:per_page => PAGE_SIZE).pager # This will run a count query
(1..pager.total_pages).each do |page_number|
Author.page(:per_page => PAGE_SIZE, :page => page_number).each do |a|
puts a.title
end
end
Вы можете поиграть с разными значениями для PAGE_SIZE, чтобы найти хороший компромисс между количеством запросов sql и использованием памяти..