2011-10-29 22 views
14

Aiutatemi per favore. Ho qualche modello che has_many associazione con altro modello. Ad esempio: profilo => has_many: statistiche E dentro di modello statistico che ho un certo margine:Rails 3 ActiveRecord caricamento di portata desideroso

scope last_ten, limit(10).order('online desc') 

E domanda è: come posso usare carico ansiosi per questo scopo? Non ho bisogno di ogni record di statistiche per il profilo. Solo ambito.

Ora posso usare solo

User.profiles.includes(:statistics) 

Grazie.

risposta

19

Come spiegato qui: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

È meglio definire un rapporto personalizzato:

class Profile < ActiveRecord::Base 
    has_many :most_recent_stats, :class_name => 'Statistic', :order => 'online DESC', :limit => 10 
    ... 
end 

User.profiles.includes(:most_recent_stats) 
+0

Nel caso sopra tutte le statistiche appartiene profilo viene caricato. Nel limite di carico desideroso verranno scartati come da documento http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html – nkm

+0

sì, buona precisione, infatti questo è il collegamento che fornisco – apneadiving

+7

E non c'è modo di caricare solo i record necessari? Sembra che avrò sempre un problema n + 1 o caricare tutti gli oggetti in memoria? E che sarà se avrò più di migliaia di dischi? Cosa posso fare ?! – ValeriiVasin

Problemi correlati