我正在構建一個從Rails應用程序中提取大量數據的Rails插件。它動態構建跨越多個表的查詢,並且會返回大量結果。下面是拉動購買數據進行了狂歡(Rails的購物車)的內置查詢的一個示例:是否可以在Rails/ActiveRecord中運行find_by_sql查詢而不將所有結果加載到內存中?
select orders.user_id as from_id, variants.product_id as to_id from orders, line_items, variants where orders.user_id is not null and variants.product_id is not null and orders.id = line_items.order_id and line_items.variant_id = variants.id order by from_id;
的問題是,ActiveRecord的負載可達所有結果到內存中。有沒有辦法避免這種情況,而不必放棄編寫特定於DB的代碼? (我知道find_each的,但不允許進行排序。)
find_in_batches就像find_each,因爲它不支持排序(或自定義的SQL):隨着努力teency位,在每個分頁SQL被包裹起來。 – scotchi 2010-10-26 05:10:06