2011-10-11 14 views
8

find_in_batches non consente l'SQL puro (per quanto posso vedere).
find_by_sql non ha supporto batch (per quanto posso vedere).Come posso fare qualcosa come find_in_batches_by_sql in Rails

Quindi, come posso fare qualcosa come find_in_batches_by_sql?

L'SQL è roba genericamente programmata e punta a database di terze parti e le serie di risultati possono contenere da centinaia a migliaia di record.

Ci sono altri trucchi del cursore con ActiveRecord che dovrei esaminare?

Grazie.

risposta

4

Si può sempre rompere il codice SQL in parti e fare qualcosa di simile

Model.select("*").where("WHERE CLAUSE HERE").joins("JOIN CLAUSES HERE").find_in_batches {...} 

Oppure, se avete bisogno di roba SQL davvero divertente si potrebbe utilizzare un offset e il limite ed il ciclo fino a quando non esauriti i risultati. Ecco l'idea di base:

offset = 0 
limit = 1000 

while(results) 
    results = Model.find_by_sql("<your SQL here> OFFSET #{offset} LIMIT #{limit}") 
    offset += limit 
    # Do stuff here 
end 
1

compensare Nota dovrebbe limitare dopo

offset = 0 
limit = 1000 

while(results) 
    results = Model.find_by_sql("<your SQL here> LIMIT #{limit} OFFSET #{offset}") 
    offset += limit 
    # Do stuff here 
end 
Problemi correlati