Обновлено для использования правильного порядка для LIMIT и OFFSET
Вы всегда можете разбить SQL на части и сделать что-то вроде
Model.select("*").where("WHERE CLAUSE HERE").joins("JOIN CLAUSES HERE").find_in_batches {...}
Или, если вам нужнодействительно забавные вещи SQL, вы можете просто использовать смещение, лимит и цикл, пока не исчерпаете результаты.Вот основная идея:
offset = 0
limit = 1000
while(results)
results = Model.find_by_sql("<your SQL here> LIMIT #{limit} OFFSET #{offset}")
offset += limit
# Do stuff here
end