2010-10-20 15 views

Respuesta

7

No estoy seguro, pero parece que tiene belongs_to :serivce en la clase Appointment y has_many :appointments la clase Service. ¿Correcto?

En ese caso, no habrá ninguna diferencia entre los 2 ejemplos. Raíles ejecutarán 2 consultas en ambos casos:

Appointment Load (0.0ms) SELECT "appointments".* FROM "appointments" WHERE ("appointments"."id" = 1) LIMIT 1 
Service Load (0.0ms) SELECT "services".* FROM "services" WHERE ("services"."id" = 1) LIMIT 1 

Si, por el contrario, usted llamaba:

s = Service.find(123) 

y luego hacer algo como:

s.appointments.find(1) 
s.appointments.find(2) 

etc. muchos lugares en el código, entonces habría tantas consultas a la base de datos como el número de estas llamadas (Rails 3 es bastante inteligente aquí, así que si ejecutó s.appointments.each, realmente recuperaría todas las citas en 1 consulta) .

En ese caso, sería mejor llamar:

s = Service.include(:appointments).find(123) 

porque entonces rieles ejecutará sólo 2 consultas: uno a buscar el Service y uno a buscar todas las citas:

Service Load (0.0ms) SELECT "services".* FROM "services" WHERE ("services"."i 
d" = 123) LIMIT 1 
Appointment Load (0.0ms) SELECT "appointments".* FROM "appointments" WHERE (" 
appointments".service_id = 123) 
Cuestiones relacionadas