2011-10-29 13 views
14

Ayuda por favor. Tengo un modelo que tiene_muy asociación con otro modelo. Por ejemplo: perfil => has_many: estadísticas Y dentro del modelo estadístico que tengo cierto margen:Rails 3 ActiveRecord carga ansiosa del alcance

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

Y pregunta es ¿cómo puedo usar la carga ansiosa para este ámbito? No necesito todos los registros de estadísticas para el perfil. Solo ámbito.

ahora puedo usar solamente

User.profiles.includes(:statistics) 

Gracias.

Respuesta

19

Como se explica aquí: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Es mejor definir una relación personalizada:

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

En el caso anterior todas las estadísticas pertenecen al perfil será cargado. En ansioso límite de carga será descartado según el documento http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html – nkm

+0

sí, buena precisión, de hecho ese es el enlace que proporciono – apneadiving

+7

Y no hay forma de cargar solo necesita registros? Parece que siempre tendré n + 1 problema o cargaré todos los objetos en la memoria? ¿Y qué será si tengo más de miles de registros? ¿Qué puedo hacer? – ValeriiVasin

Cuestiones relacionadas