2011-05-08 7 views
6

Todos los ejemplos de: incluir para la carga ansiosa son para consultas de nivel de clase. Lo probé en la instancia de mi modelo y todavía emitió un montón de consultas: ¿funciona con métodos de instancia?¿Incluye: trabajo en instancias de ActiveRecord?

#in controller 
@emails = person.sent_emails(:include => [:recipient]) 

#in view 
render @emails 

# _email.html.erb partial 
<h1><%= email.recipient.name %></h1> 
<p> 
<%= email.content %> 
</p> 

#still issues a select * for emails, N+1 for recipients :/ 
+2

Qué hay dentro de la '_email' parcial? –

+0

Se agregó a la pregunta –

+2

La llamada 'email.recipient' debería ejecutar' select * from users' si el destinatario no está ansioso de cargar. ¿Estás seguro de que estás viendo 'select * from emails' varias veces? –

Respuesta

3

Parece un poco Rails 2ish Lo sé y puede haber un mejor Rails 3 vías, pero esto funciona.

@emails = person.sent_emails.find(:all, :include => :recipient) 

Editar: Véase el comentario de BaroqueBobcat de un método mejor en Rails 3

+3

puede usar 'sent_emails.all (: include =>: recipient)' – BaroqueBobcat

+0

Usó la sintaxis de BaroqueBobcat - eso es lo que me faltaba. Gracias –

+0

OK, entonces en este ejemplo tengo una instancia Person. Y puedo hacer "person.sent_emails.all (: include =>: recipient)". Y devuelve el resultado que esperaba. Pero la variable person.sent_emails no se modifica. ¿Cómo puedo cargar estas asociaciones dentro de la instancia de ActiveRecord? – ancajic

Cuestiones relacionadas