2011-10-29 10 views
14

Proszę mi pomóc. Mam model, który ma wiele skojarzeń z innym modelem. Na przykład: profil => has_many: statystyka i wewnątrz statystycznego modelu mam pewien zakres:Szyny 3 Aktywne Zapisywanie ładowanie zakresu

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

A pytanie brzmi: w jaki sposób mogę korzystać chętny obciążenie dla tego zakresu? Nie potrzebuję każdego rekordu statystyk dla profilu. Tylko zasięg.

Teraz mogę używać tylko

User.profiles.includes(:statistics) 

Dzięki.

Odpowiedz

19

Jak wyjaśniono tutaj: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Lepiej zdefiniować niestandardową zależność:

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

w powyższym przypadku wszystkie statystyki należy do profilu zostaną załadowane. W chęci załadowania limit zostanie odrzucony zgodnie z dokumentem http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html – nkm

+0

tak, dobra precyzja, rzeczywiście to jest link, który podaję – apneadiving

+7

I nie ma sposobu, aby załadować potrzebne tylko rekordy? Wygląda na to, że zawsze mam problem z n + 1 lub ładuję wszystkie obiekty do pamięci? A co będzie, jeśli będę miał więcej niż tysiące płyt? Co mogę zrobić ?! – ValeriiVasin