Объект, возвращаемый из ActiveRecord::Base.connection.execute
, фактически является Array
, что означает, что вы можете использовать rslt[5,20]
для получения 20 результатов, начиная с 6-го элемента.
Я также хотел бы отметить, что вы можете использовать find_in_batches
, который представляет собой API, предоставляемый ActiveRecord .
Пример, приведенный на странице API:
Person.where("age > 21").find_in_batches do |group|
sleep(50) # Make sure it doesn't get too crowded in there!
group.each { |person| person.party_all_night! }
end
РЕДАКТИРОВАТЬ: извините, это не сработало для вас. прямо с моего рельса (3.0.10) консоль
ruby-1.8.7-p299 :006 > sql = "select * from domains"
=> "select * from domains"
ruby-1.8.7-p299 :007 > ActiveRecord::Base.connection.execute(sql).class
=> Array
ruby-1.8.7-p299 :008 > ActiveRecord::Base.connection.execute(sql).length
=> 18
ruby-1.8.7-p299 :010 > ActiveRecord::Base.connection.execute(sql)[5,20].length
=> 13